簡體   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