我有两个不同的正则表达式要匹配并替换为给定的文本。
我正在尝试使用组合正则表达式执行以下操作:
regex = re.compile(r'((.*)founder(.*)|^[0-9]{4}$')
问题是,当在正则表达式上应用替换时,我需要知道哪个组合模式与之匹配才能使用相应的替换。
如果有人能帮助我实现这一目标,我将不胜感激!
答案 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
在这里,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
替换)。