Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 re.sub()-是否在不使用捕获组的情况下替换为match中的文本?_Python_Regex_Regex Group - Fatal编程技术网

Python re.sub()-是否在不使用捕获组的情况下替换为match中的文本?

Python re.sub()-是否在不使用捕获组的情况下替换为match中的文本?,python,regex,regex-group,Python,Regex,Regex Group,我试图弄清楚如何使python的re模块在彩色输出中表现得更像grep 这意味着我需要获取一个我无法控制的Abritary正则表达式,在字符串中找到它,然后对匹配项进行着色。因为我无法控制正则表达式,所以我的解决方案不能依赖于捕获组 例如,如果我有: s="omglolwtfbbq" regex=r"l[\w]" 我希望python用一个使用匹配项的字符串替换lo和lw,而不使用正则表达式中的捕获组。比如: re.sub(regex, "!%s!", s) re.sub(regex, "!\0

我试图弄清楚如何使python的
re
模块在彩色输出中表现得更像
grep

这意味着我需要获取一个我无法控制的Abritary正则表达式,在字符串中找到它,然后对匹配项进行着色。因为我无法控制正则表达式,所以我的解决方案不能依赖于捕获组

例如,如果我有:

s="omglolwtfbbq"
regex=r"l[\w]"
我希望python用一个使用匹配项的字符串替换
lo
lw
,而不使用正则表达式中的捕获组。比如:

re.sub(regex, "!%s!", s)
re.sub(regex, "!\0!", s)
re.sub(regex, "!<THE MATCHING STRING>!", s)
最后,我只是尝试将
s
中与发送的正则表达式匹配的部分着色;grep通过一个简单的字符串输入来实现这一点,并且没有捕获组


这在python中可能吗?

要回答您的第一个问题,
re.sub
允许您使用函数而不是固定替换字符串。例如

>>s=“omglowtfbbq”
>>>regex=r“l[\w]”
>>>re.sub(正则表达式,lambda x:!%s!%x.group(),s)
“天哪!瞧!!lw!tfbbq'
请注意,match对象的
.group
方法返回整个匹配(无论是否存在捕获组)。如果您有捕获组,则
.groups
返回那些捕获的组


为了回答您关于着色的具体问题,我建议您看一下。

我认为Python
re
模块并不能做到这一点,相反,您可以设计积极的环视来完成这类
re.sub
,例如:

import re

print(re.sub(r'(?=l)', '!', "omglolwtfbbq"))
用于放置
右前
l

输出
如果您希望探索/简化/修改该表达式,请在的右上面板上进行解释。在中,您可以查看它与一些示例输入的匹配情况(如果您愿意)。

这是我正在寻找的解决方案-太棒了!谢谢Emma-我更新了问题,以便更清楚地了解我在问什么;我实际上对发送的正则表达式没有任何控制权;这完全是武断的。
import re

print(re.sub(r'(?=l)', '!', "omglolwtfbbq"))
omg!lo!lwtfbbq