正则表达式错误:“位置 3 处的转义错误 \c”- 如何解决?

Regular Expression Error: 'bad escape \c at position 3' - How to Resolve?

提问人:Devansh Purwar 提问时间:11/11/2023 最后编辑:Devansh Purwar 更新时间:11/12/2023 访问量:91

问:

我的模式没有在正则表达式中编译并给出错误的转义错误,有什么方法可以解决吗

import re 
text = "n\\c" 
pattern = rf"\\b{text.lower()}\\b" 
re.search(pattern, "hello", flags=re.IGNORECASE)

Python 中文文档 - 3.8, RE 版本 - 2.2.1

我想使用模式中的文本在我的搜索字符串中找到它,例如“hello”。 图案中的文本会有所不同

示例 1

text = “睡着了”, sentence= “一只懒惰的狐狸跳过一只睡着的狗”, 输出:无

示例 2

text = “一个沉睡的”, sentence= “一只懒惰的狐狸跳过一只熟睡的狗” 输出 : “a sleeping

蟒蛇 python-3.x 正则表达式 python-re

评论

0赞 Michael Butscher 11/11/2023
in 应该是什么意思?\\ctext
0赞 Devansh Purwar 11/11/2023
我有一个字符串列表,可以包含这种没有任何意义的文本,我想使用正则表达式处理这种情况,但我的模式没有编译这是给定文本的问题,有什么办法处理?
3赞 Nick 11/11/2023
pattern = rf"\b{re.escape(text.lower())}\b"请注意,您不需要在原始字符串中转义 \
1赞 InSync 11/11/2023
请举出一些输入和预期输出的例子。
0赞 sln 11/12/2023
哦,猜猜我们必须运行你的代码..通常是一个转义序列,表示_control字符。如果没有跟随字符,它就是一个未知的序列。\c

答:

0赞 Semere627 11/11/2023 #1

在代码中,您使用 f 字符串来构造模式,但也使用 \b 字边界转义序列并将反斜杠加倍。但是,在这种情况下,\b 和双反斜杠不是必需的。

因此,要解决此问题,您可以按如下方式修改代码:

import re
text = r"n\\c"
pattern = re.escape(text.lower())
print(pattern)
match = re.search(pattern, "hello", flags=re.IGNORECASE)
print(match)

评论

0赞 Devansh Purwar 11/11/2023
在“你好”的情况下,它可以工作,但是如果我有一个句子并且我不希望它部分匹配,这将失败
0赞 jsbueno 11/11/2023
这与问题中的问题无关。O.P. 正在发出手动转义以将 \\ 字符包含在字符串中,但在 e 嵌入第二个字符串时,转义已经被消耗掉了。使用原始字符串可以轻松修复。
1赞 jsbueno 11/11/2023
实际上,它有点相关,因为您正确地使用了 re.escape - 但这应该是答案的重点。
0赞 Reilas 11/12/2023 #2

下面是一个示例。

text = "a sleep"
sentence= "A lazy fox jump over a sleeping dog"
m = re.search(rf'(?i)\b{re.escape(text)}\b', sentence)
0赞 sln 11/12/2023 #3

Python 正则表达式限制了它不支持的转义序列。
它会抛出错误。
大多数引擎只是剥离逃生。

>>> import re
>>> pat = "\c"
>>> re.search(pat, "hello")
re.error: bad escape \c at position 0

\cX是一个需要 X控制字符结构,并且许多引擎都不支持
它。蟒蛇是其中之一吗?