[英]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.