使用正则表达式将捕获的单词替换为捕获的单词和报价

时间:2019-06-19 19:10:27

标签: python regex

我有一个字符串:'testing: ',并想用' "testing:" '替换它。 换句话说,请在字符串内的单词周围添加引号

我尝试使用

re.sub('[a-zA-Z]+:', '"${name}"',word)

但这只是将其替换为{name}

2 个答案:

答案 0 :(得分:2)

您的原始表达式很好,我们只需在其周围添加一个捕获组,

([A-Za-z]+:)

Demo

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"([A-Za-z]+:)"

test_str = "testing:"

subst = "\"\\1\""

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

输出

"testing:"

re.sub的示例

result = re.sub(pattern, repl, string, count=0, flags=0);

result = re.sub('abc',  '',    input)           # Delete pattern abc
result = re.sub('abc',  'def', input)           # Replace pattern abc -> def
result = re.sub(r'\s+', ' ',   input)           # Eliminate duplicate whitespaces
result = re.sub('abc(def)ghi', r'\1', input)    # Replace a string with a part of itself

Reference

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:2)

您可以使用\g<0> backreference来指代整个比赛:

  

后向引用\g<0>替换RE匹配的整个子字符串。

代码:

word = re.sub(r'[a-zA-Z]+:', r'"\g<0>"', word)

请参见Python demo

import re
word = 'testing:  '
word = re.sub(r'[a-zA-Z]+:', r'"\g<0>"',word)
print(word) # => "testing:"