Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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_Python_Regex - Fatal编程技术网

正则表达式未正确替换预期结果python

正则表达式未正确替换预期结果python,python,regex,Python,Regex,我有一本要替换的单词词典 preprocess_pattern = {r" AND ": r" & ", r" O\A ": r" O/A ", r" D\B ": r" O/A ", r" D/B ": r" O/A "} def preprocess_rules(text): for detect_patte

我有一本要替换的单词词典

preprocess_pattern = {r" AND ": r" & ",
 r" O\A ": r" O/A ",
 r" D\B ": r" O/A ",
 r" D/B ": r" O/A "}

def preprocess_rules(text):

    for detect_pattern, replace_pattern in preprocess_pattern .items():
        text = re.sub(detect_pattern, replace_pattern, str(text))
        
    return text

preprocess_rules('AMAZON O\A MICROSOFT')

它给了我一个“AMAZON O\a MICROSOFT”的结果;用两个斜杠()。O\A没有替换为O/A。我想知道是什么导致了这个问题。

这个
\
是一个元字符,所以你需要使用以下方法来转义
检测模式

输出

AMAZON O/A MICROSOFT
从文件中:

在模式中转义特殊字符。如果您愿意,这很有用 匹配可能具有正则表达式的任意文字字符串 其中的元字符


字符
\
是正则表达式中的“转义”字符。例如:

  • 匹配所有内容
  • \。
    匹配文字点
因此,在正则表达式中,您使用的是
O\A
,这意味着:
O
后跟literal
A
,这就是它不匹配/替换的原因

现在,要匹配字符
\
,您需要将其自身转义!将
O\A
替换为
O\\A
将起作用,因为它匹配:

  • O
  • \\
    :文字
    \
  • A
请注意,您需要对
D\B
执行相同的操作:

preprocess_pattern = {
 r" AND ": r" & ",
 r" O\\A ": r" O/A ",
 r" D\\B ": r" O/A ",
 r" D/B ": r" O/A "
}

这正是我想要的。谢谢!:)如果不使用正则表达式,为什么要在这里使用正则表达式?不要使用
re.sub
,请使用
。更换
preprocess_pattern = {
 r" AND ": r" & ",
 r" O\\A ": r" O/A ",
 r" D\\B ": r" O/A ",
 r" D/B ": r" O/A "
}