繁体   English   中英

如何在正则表达式 Python 中的每个 substring 之后拆分字符串

[英]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位和)
  • )关闭组

正则表达式演示| Python 演示

例子

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM