Python:具有不同替换项的不同正则表达式

时间:2018-07-03 10:45:44

标签: python regex substitution

我有两个不同的正则表达式要匹配并替换为给定的文本。

  • regex1:如果文本包含单词“ founder”,则将所有文本替换为 首席执行官
  • regex 2:如果文本包含9位数字,则将其替换为 NUM

我正在尝试使用组合正则表达式执行以下操作:

regex = re.compile(r'((.*)founder(.*)|^[0-9]{4}$')

问题是,当在正则表达式上应用替换时,我需要知道哪个组合模式与之匹配才能使用相应的替换。

如果有人能帮助我实现这一目标,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以使用re.sub

例如:

import re

s = """ if the text contains the word founder
123456789 sdfsdfsdf sdfsdf sdfsdfsdf"""

text = re.sub("founder", "CEO", s)
text = re.sub("[0-9]{9}", "NUM", text)  

print(text)

输出:

 if the text contains the word CEO
NUM sdfsdfsdf sdfsdf sdfsdfsdf

答案 1 :(得分:0)

看来您可以在这里轻松避免使用正则表达式:

SELECT PayDate, Saderat, Melli, Sina
FROM
(SELECT  PayDate  , COUNT(*) AS [Count]  , b.BankName 
FROM   Payments p INNER JOIN  dbo.Accounts a  ON a.AccountId = p.CashAccountId
INNER JOIN  dbo.Banks b ON b.BankId = a.BankId
WHERE   PayTypeId = 21.101 AND PayDate BETWEEN '970401' AND '970412' 
GROUP BY PayDate , b.BankName
ORDER BY paydate) AS SourceTable
PIVOT
(
 SUM([Count])
 FOR BankName IN (Saderat, Melli, Sina)
) AS PivotTable;

请参见Python demo

如果您想使用正则表达式和def replace_em(text): if 'founder' in text: # if text contains founder return 'CEO' elif text.isdigit() and len(text) == 9: # all digits and length = 9 return 'NUM' else: return text print(replace_em("Some founder here")) # CEO print(replace_em("123456789")) # NUM print(replace_em("Some other text")) # Some other text ,可以尝试使用此代码,但是请注意它的效率较低:

re.sub

请参见another Python demo

在这里,import re def replace_em(m): return 'NUM' if m.group(1) else 'CEO' regex = re.compile(r'(?s)^([0-9]{9})$|.*founder.*') print(re.sub(regex, replace_em, "Some founder here")) print(re.sub(regex, replace_em, "123456789")) print(re.sub(regex, replace_em, "Some other text")) 与第一个备选方案匹配其中包含(?s).*founder.*|^([0-9]{9})$的任何字符串(请注意,founder使(?s)与包括换行符的任何char匹配)和另一个备选方案匹配并<捕获>捕获到组1中的一个九位数的字符串。第二个参数是一种回调方法,该方法根据自定义逻辑替换匹配项(如果第1组匹配,则用.替换,否则用NUM替换)。