Python re.sub()-是否在不使用捕获组的情况下替换为match中的文本?
我试图弄清楚如何使python的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
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