如何处理Python正则表达式匹配中的多行模式

时间:2018-03-26 04:30:46

标签: python regex python-3.x

我有一个公司名称列表,用“' company'”替换。跨多行的列表。

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'

1 个答案:

答案 0 :(得分:3)

您可以将此视为一个详细模式的示例,该模式允许(并忽略)像换行符这样的空格:

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))

<强>输出

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))

<强>输出

cmp is a great company, so is cmp