[英]How to handle the multiple-line pattern in Python regular expression matching
我有一個公司名稱列表,將被“公司”一詞取代。 跨多行的列表。
cmp=re.compile(""" A | B |
C | D
""")
text='A is a great company, so is B'
cmp.sub('company',text)
但它不起作用。 我該怎么解決這個問題?
編輯:
上面給出的例子沒有考慮公司名稱中的空格。
company1=re.compile(r"""Berkshire Hathaway|Australia & New Zealand Bank
|Wells Fargo|AIG
|Ind & Comm Bank of China|BNP Paribas""")
company2=re.compile(r"""Berkshire Hathaway|Australia & New Zealand Bank
|Wells Fargo|AIG
|Ind & Comm Bank of China|BNP Paribas""",re.VERBOSE)
text='AIG is a great company, so is Berkshire Hathaway'
company1.sub('cmp',text)
>>> 'AIG is a great company, so is cmp'
company2.sub('cmp',text)
>>> 'cmp is a great company, so is Berkshire Hathaway'
您可以將此視為一個冗長模式的示例,它允許(並忽略)像換行符這樣的空格:
import re
cmp = re.compile(r""" A | B |
C | D
""", re.VERBOSE)
text = 'A is a great company, so is B'
print(cmp.sub('company', text))
OUTPUT
company is a great company, so is company
空間包含在公司名稱中。 ...關於如何解決這個問題的任何想法?
我們需要做一些像名稱中出現的空格字符的CGI轉義。 這是一種基於正則表達式的方法,不需要解碼編碼空間:
import re
companies = re.compile(re.sub(r"(?<=\S) (?=\S)", r"[ ]", """Berkshire Hathaway|Australia & New Zealand Bank
|Wells Fargo|AIG
|Ind & Comm Bank of China|BNP Paribas"""), re.VERBOSE)
text = 'AIG is a great company, so is Berkshire Hathaway'
print(companies.sub('cmp', text))
OUTPUT
cmp is a great company, so is cmp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.