我不理解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
和\\3
在sub
函数中的作用,那将会很棒。我还将输入更改为Mr... Ansh sahajpal
,并在第5行中进行了以下更改:
text=re.sub(" ?"+pre,"\\1<dot>\\2<dot>",text)
我认为它会替换第一个.
和第二个.
,但它给了我一个错误。
请做任何解释。
答案 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;。