使用Python中的正则表达式替换另一个字符串

时间:2018-03-20 23:20:40

标签: python regex python-3.x

我正在尝试使用正则表达式将所选文本替换为所选文本中的单个单词。我尝试了re.sub(),但它似乎需要第二个参数"我希望用文本替换它#34;作为字符串,而不是正则表达式。

这是我的字符串:

I go to Bridgebrook i go out <ERR targ=sometimes> some times </ERR> on Tuesday night i go to Youth <ERR targ=club> clob </ERR> .

这是我的代码:

# The regex of the form <ERR targ=...> .. </ERR>
select_text_regex = r"<ERR[^<]+<\/ERR>"

# The regex of the correct word that will replace the selected text of teh form <ERR targ=...> .. </ERR>
correct_word_regex = r"targ=([^>]+)>"
line = re.sub(select_text_regex, correct_word_regex, line.rstrip())

我明白了:

I go to Bridgebrook i go out targ=([^>]+)> on Tuesday night i go to
Youth targ=([^>]+)> .

我的目标是:

I go to Bridgebrook i go out sometimes on Tuesday night i go to
Youth club .

Python是否支持使用Regex替换两个字符串?

3 个答案:

答案 0 :(得分:1)

这是另一个解决方案(我还使用&#34;非贪婪&#34;修饰符重写了正则表达式,将?放在*之后,因为我发现它更具可读性。 / p>

r"\1"引用的组是以parenthises作为未命名的组完成的。还使用re.compile作为样式首选项来减少args的数量:

line = "I go to Bridgebrook i go out <ERR targ=sometimes> some times </ERR> on Tuesday night i go to Youth <ERR targ=club> clob </ERR> ."
select_text_regex = re.compile(r"<ERR targ=(.*?)>.*?<\/ERR>")
select_text_regex.sub(r"\1", line)

命名组替代:

line = "I go to Bridgebrook i go out <ERR targ=sometimes> some times </ERR> on Tuesday night i go to Youth <ERR targ=club> clob </ERR> ."
select_text_regex = re.compile(r"<ERR targ=(?P<to_replace>.*?)>.*?<\/ERR>")
select_text_regex.sub(r"\g<to_replace>", line)

您可以在此处找到有关群组参考的一些文档:

https://docs.python.org/3/library/re.html#regular-expression-syntax

答案 1 :(得分:0)

您需要匹配模式中的目标词,作为捕获组 - 您无法在替换字符串中开始全新搜索!

未经测试,但这应该可以胜任:

替换r"<ERR targ=(.*?)>.*?</ERR>"

使用r"\1"

答案 2 :(得分:0)

您正在寻找的是正则表达式捕获组。而不是选择正则表达式,然后尝试用另一个正则表达式替换它,将你想要匹配的正则表达式的一部分放在select语句中的括号内,然后用\ 1替换它。 (数字是您包括的组)

line = "I go to Bridgebrook i go out <ERR targ=sometimes> some times </ERR> on Tuesday night i go to Youth <ERR targ=club> clob </ERR> ."

select_text_regex = r"<ERR targ=([^<]+)>[^<]+<\/ERR>" #Correct Here.
correct_word_regex = r"\1" #And here.

line = re.sub(select_text_regex, correct_word_regex, line.rstrip())

print(line)