以下重新代码是什么意思?

时间:2016-06-07 23:30:16

标签: python regex replace

我不理解Python中的这段代码。我知道这个函数做了什么,但我不知道那些\\在替换字符串中做了什么以及做什么。

import re
caps="([A-Z])"
pre="(Mr|mr|Mr|St|st|ST|Mrs|MRS|mrs|Ms|MS|ms|Dr|DR|dr|miss|Miss|MISS)[\.\.\.]"
def tokenize_sentence(text):
    text=re.sub(" ?"+pre,"\\1<dot>",text)
    text = re.sub(caps + "[.]" + caps + "[.]" + caps + "[.]", "\\1<prd>\\2<prd>\\3<prd>", text)
    print(text)
tokenize_sentence("Mr. Ansh sahajpal A.B.C.")

输出结果为:

Mr<dot> Ansh sahajpal A<prd>B<prd>C<prd>

如果您可以向我解释\\1\\2\\3sub函数中的作用,那将会很棒。我还将输入更改为Mr... Ansh sahajpal,并在第5行中进行了以下更改:

text=re.sub(" ?"+pre,"\\1<dot>\\2<dot>",text)

我认为它会替换第一个.和第二个.,但它给了我一个错误。
请做任何解释。

1 个答案:

答案 0 :(得分:2)

\1\2等引用正则表达式中匹配的子表达式(括在括号中)。 \1是匹配的第一个表达式,\2是第二个,等等。它们在替换字符串中用于标记要修改匹配的子表达式的位置。

匹配子表达式的常用约定是使用括号。这是一个例子:

str = 'an example word:cat!!'
print (re.sub (r'word:(\w+)', r'\0dog', str))

表示匹配冒号后的任意数量的字母数字字符并产生:

an example word:dog!!

在这种情况下,(\ w +)是一组字母数字字符的分组表达式,包括&#34; _&#34;。