簡體   English   中英

如何處理Python正則表達式匹配中的多行模式

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM