问题:
有没有办法告诉正则表达式引擎将正则表达式的特定部分逐字对待(即完全按原样查找该部分,无需通常的解析)而无需手动转义特殊字符?
一些背景:
我正在尝试从另一个正则表达式反向引用给定正则表达式上的组。例如,假设我想要将 hello(.*?)olleh
与文本 1 进行匹配,然后在文本 2 中查找 bye$1eyb
,其中 $1
code> 将被替换为文本 1 中匹配的组 1。因此,如果文本 1 碰巧包含字符串 "helloFOOolleh"
,程序将查找 "byeFOOeyb"
在文本 2 中。
上面的代码在大多数情况下都可以正常工作,但如果文本 1 包含类似 "hello.olleh"
的内容,程序将不仅匹配 "hello.olleh"
> 以及文本 2 中的 "helloXolleh"
、"hellouolleh"
等,因为它将 .
解释为正则表达式特殊字符而不是纯点字符。
其他评论:
我不能只搜索将 $1
解析为组 1 匹配的纯字符串,因为我想在文本 2 中搜索的内容本身可能包含其他不相关的正则表达式。
我一直试图避免解析从文本 1 返回的匹配项并转义每个特殊字符,但如果有人知道一种巧妙地做到这一点的方法,那也可以工作。
我目前正在使用 Python 进行此工作,但如果可以使用任何其他语言/程序轻松完成,我很乐意尝试一下。
最佳答案
您可以使用re.escape
函数来转义要按字面匹配的文本。因此,在提取匹配文本(例如“hello.olleh”中的“.”)后,请先对其应用 re.escape
,然后再将其插入到第二个正则表达式中。
关于python - 正则表达式中的逐字上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025119/