提问人:Devansh Purwar 提问时间:11/11/2023 最后编辑:Devansh Purwar 更新时间:11/12/2023 访问量:91
正则表达式错误:“位置 3 处的转义错误 \c”- 如何解决?
Regular Expression Error: 'bad escape \c at position 3' - How to Resolve?
问:
我的模式没有在正则表达式中编译并给出错误的转义错误,有什么方法可以解决吗
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
答:
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 的控制字符结构,并且许多引擎都不支持
它。蟒蛇是其中之一吗?
评论
\\c
text
pattern = rf"\b{re.escape(text.lower())}\b"
请注意,您不需要在原始字符串中转义 \\c