请教下不规则的 Python 正则匹配

2022-03-24 14:11:09 +08:00
 ekk0
str = """
原告:芊大跌生物科技有限公司。注册地址:广州市海珠区新港东路 241143
号 202 房。统一社会信用代码: 91440101M1111111.电话:123 。
法定代表人:林子点。
原告:林子点,女, 1998 年 1 月 1 日出生,身份证号: 4409021111081111116 ,注册地址:
广东省茂名市茂南区新建路二巷 92111 号。
被告一:广州昂立一号口服液。注册地址:广州市海珠区南华中路 281111
号。统一社会信用代码: 91440111111111113 。
负责人:王斐点。
被告二:广州市海珠区琶洲街黄埔南。注册地址:广州市海珠区新
港东路黄埔村。统一社会信用代码: 551111111MEA359637P 。
"""
#这样只能获取到原告电话,但是,当原告 2 没有电话时候,结果就是其他字段了,怎么解决?
rst = re.findall(r'原告.{0,1}[:|:|;](.*?)[,|。|,|;]+[^联系|电话]+[联系方式|电话|电话号码]+[:|:|;]+(.*?)[,|:|、|,|。|\.|;|联系]', str)
print(rst)
2045 次点击
所在节点    Python
5 条回复
ChaosesIb
2022-03-24 14:30:22 +08:00
[^联系|电话]+ 匹配到了末尾,回溯后 [联系方式|电话|电话号码]+ 匹配到了信用代码,最后 .*? 就出问题了。
建议你先学下正则基本语法,字符组里不需要写 |,多字符分支需要用分组,把这些毛病改了就自然修好了。
另外,这个问题该发到正则节点。
Lonenso
2022-03-24 19:50:52 +08:00
除了应该学习一下正则以外,推荐用 https://regex101.com/ 练习和调试。
ekk0
2022-03-25 08:47:57 +08:00
@ChaosesIb 谢谢
ekk0
2022-03-25 08:48:26 +08:00
imn1
2022-03-25 17:22:39 +08:00
联系|电话 --> 联 + (系|电) + 话
但前面加上排除符就变成了排除 联系|电话 这五个字符,强调:是五个字符,不是四个

我这样写你看明白了么?

关于排除字符串(两个字符或以上连续),请搜索 “正则排除” 的相关文章

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX