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


str = """
原告:芊大跌生物科技有限公司。注册地址:广州市海珠区新港东路241143
号202房。统一社会信用代码: 91440101M1111111.
法定代表人:林子点。
原告:林子点,女, 1998年1月1日出生,身份证号: 4409021111081111116,注册地址:
广东省茂名市茂南区新建路二巷92111号。
被告一:广州昂立一号口服液。注册地址:广州市海珠区南华中路281111
号。统一社会信用代码: 91440111111111113。
负责人:王斐点。
被告二:广州市海珠区琶洲街黄埔南。注册地址:广州市海珠区新
港东路黄埔村。统一社会信用代码: 551111111MEA359637P。
"""
#这样只能获取到原告名字
rst = re.findall(r'原告.{0,1}[:|;|: ](.*?)[,|、|,|。|\.|]', str)
print(rst)

我想用正则获取原告和他的注册地址,怎么做呢
注意:不是被告的注册地址,而且注册地址一定要对应原告

先把多行字符串变成单行字符串,然后利用正则匹配。

import re
 
str = """
原告:芊大跌生物科技有限公司。注册地址:广州市海珠区新港东路241143
号202房。统一社会信用代码: 91440101M1111111.
法定代表人:林子点。
原告:林子点,女, 1998年1月1日出生,身份证号: 4409021111081111116,注册地址:
广东省茂名市茂南区新建路二巷92111号。
被告一:广州昂立一号口服液。注册地址:广州市海珠区南华中路281111
号。统一社会信用代码: 91440111111111113。
负责人:王斐点。
被告二:广州市海珠区琶洲街黄埔南。注册地址:广州市海珠区新
港东路黄埔村。统一社会信用代码: 551111111MEA359637P。
"""

# 字符串过滤掉空白字符,如\n、\t、空格之类的
str = ''.join(str.split())

groups = re.findall('原告:(.*?)[。,,]{1}.*?注册地址:(.*?)。{1}', str)
print(groups)
# [('芊大跌生物科技有限公司', '广州市海珠区新港东路241143号202房'), ('林子点', '广东省茂名市茂南区新建路二巷92111号')]


我给个简单的,“抛砖引玉”

rst = re.findall(r'原告[::](\w+)[,。,][^注]*注册地址[::](\w+)。', re.sub(r'[\s\n]', '', str))
print(rst)

img


修订后
佛了,我评论区评论代码被警告非法了,那我在原来的下面增加
如果你要2个情况都保留,那这2个正则表达式分开获取吧,第一个是获取有地址的,第二个是获取没有地址的,2个得到后,你要咋处理都行

rst = re.findall(r'原告[::](\w+)[,。,][^注原被]*注册地址[::](\w+)。', re.sub(r'[\s\n]', '', str))
print(rst)
 rst1 =  re.findall(r'原告[::](\w+)[,。,][^注原被]*。', re.sub(r'[\s\n]', '', str))
print(rst1)

先根据关键词被告把字符串分割成列表,然后拿到只有原告的字符串就好匹配了

import re
str = """
原告:芊大跌生物科技有限公司。注册地址:广州市海珠区新港东路241143
号202房。统一社会信用代码: 91440101M1111111.
法定代表人:林子点。
原告:林子点,女, 1998年1月1日出生,身份证号: 4409021111081111116,注册地址:
广东省茂名市茂南区新建路二巷92111号。
被告一:广州昂立一号口服液。注册地址:广州市海珠区南华中路281111
号。统一社会信用代码: 91440111111111113。
负责人:王斐点。
被告二:广州市海珠区琶洲街黄埔南。注册地址:广州市海珠区新
港东路黄埔村。统一社会信用代码: 551111111MEA359637P。
"""
rst = re.findall(r'原告::[,。,][^注]*注册地址::。', re.sub(r'[\s\n]', '', str))
for a in rst:
# print(a)
plaintiff=a[0]
address=a[1]
means='原告:'+plaintiff+' '+'注册地址:'+address
print(means)