Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用修改后的匹配字符串替换正则表达式中的匹配字符串_Python_Regex - Fatal编程技术网

Python 如何用修改后的匹配字符串替换正则表达式中的匹配字符串

Python 如何用修改后的匹配字符串替换正则表达式中的匹配字符串,python,regex,Python,Regex,让我们举一个例子 这里,让我们说,我不想删除注释,而是想用修改后的匹配文本替换这些注释。例如,将Python风格的注释替换为C风格的注释,以便#这是电话号码变成/*这是电话号码*/。我该怎么做?您可以在替换字符串中使用捕获组和反向引用: >>> phone = "2004-959-559 # This is Phone Number" >>> print re.sub(r'#(.*)$', r'/* \1 */', phone) 2004-959-559 /*

让我们举一个例子


这里,让我们说,我不想删除注释,而是想用修改后的匹配文本替换这些注释。例如,将Python风格的注释替换为C风格的注释,以便
#这是电话号码
变成
/*这是电话号码*/
。我该怎么做?

您可以在替换字符串中使用捕获组和反向引用:

>>> phone = "2004-959-559 # This is Phone Number"
>>> print re.sub(r'#(.*)$', r'/* \1 */', phone)
2004-959-559 /*  This is Phone Number */
  • (.*)
    捕获第一个捕获组中
    #
    之后的字符串
  • \1
    re.sub
    中匹配正则表达式中第一个捕获组的反向引用
  • 为了正确解释
    \1
    ,必须使用原始字符串模式进行替换

根据您的评论示例,str.replace应该适用于您:

>
>>>str1=“#这是一个电话号码”
>>>str2=str1。替换(“#”、“/*”)+“*/”
>>>
>>>str2
“/*这是一个电话号码*/”
>>>

使用捕获组?尝试
re.sub(r'#(.*)$|\D',lambda x:“/*{}*/.”格式(x.group(1)),如果x.group(1)else“”,phone)
您可以使用:
re.sub(r'#(.*),r'/*\1*/',phone)
所以对于任何组,我都需要用括号括起来?其次,$在这里是什么意思?
$
是一个零宽度的锚点,用于匹配字符串的结尾,这也是您在问题中遇到的问题。对于捕获组,是的,您需要将模式包含在
中。我知道一个简单的替换就可以了,但为了便于学习,我只举了一个例子。
>>> phone = "2004-959-559 # This is Phone Number"
>>> print re.sub(r'#(.*)$', r'/* \1 */', phone)
2004-959-559 /*  This is Phone Number */