[英]How to split a string AFTER every substring in Regex Python
我有公司和身份证的长文本。 我想将字符串拆分为一个列表,其中一个项目以 ID 结尾。 每个 ID 由 5 位数字组成,并以相同的格式出现在文本中\(ID\:\d{5}\)
text = "Company A, Inc(ID:12345), some-company, X (ID:12324), Some Special Company Z (ID:34324)"
我想得到的是以下内容:
["Company A, Inc (ID:12345)", "some-company, X (ID:12324)", "Some Special Company Z (ID:34324)"]
有没有办法用正则表达式做到这一点? 提前致谢!
尝试
a=re.findall(r'(.*?\(ID\:\d{5}\))',text)
print(a)
output
['Company A, Inc(ID:12345)',
', some-company, X (ID:12324)',
', Some Special Company Z (ID:34324)']
你会尝试以下方法:
import re
text = "Company A, Inc(ID:12345), some-company, X (ID:12324), Some Special Company Z (ID:34324)"
a = re.split(r'(?<=\(ID:\d{5}\)),\s*', text)
print(a)
Output:
['Company A, Inc(ID:12345)', 'some-company, X (ID:12324)', 'Some Special Company Z (ID:34324)']
正则表达式r'(?<=\(ID:\d{5}\)),\s*'
:
(?<=pattern)
是一个积极的后向断言。 它的宽度为零,匹配的 substring 保留在拆分列表中。\(ID:\d{5}\)
是您描述的格式。,\s*
匹配逗号后跟零个或多个空格。 我们不想将 substring 包含在结果中,它用作分隔符。您可以选择匹配逗号和 1 个或多个空格字符。 然后为公司名称匹配至少一个非空白字符,直到第一次出现 id 模式。
请注意,您不必转义\:
(?:,\s+)?(\S.*?\(ID:\d{5}\))
解释
(?:,\s+)?
可选择匹配逗号和 1+ 个空格字符(
捕获组 1
\S.*?
匹配一个非空白字符,后跟 0* 尽可能少的字符\(ID:\d{5}\)
匹配(ID:
5位和)
)
关闭组例子
import re
text = "Company A, Inc(ID:12345), some-company, X (ID:12324), Some Special Company Z (ID:34324)"
print(re.findall(r"(?:,\s+)?(\S.*?\(ID:\d{5}\))", text))
Output
['Company A, Inc(ID:12345)', 'some-company, X (ID:12324)', 'Some Special Company Z (ID:34324)']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.