【发布时间】:2016-06-07 23:30:16
【问题描述】:
我不理解 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)
我认为它会替换第一个 . 和第二个 . 但它给了我一个错误。
请任何解释都可以。
【问题讨论】:
-
您的问题不在主题范围内,因为您正在寻求调试帮助。如果您逐行运行调试器,您可以理解您的代码的作用。顺便说一句,
\1或\someNumber是正则表达式捕获组索引,所以如果你的正则表达式捕获hello,那么如果你使用\1,你指的是你好,所以\1\1将是hellohello -
请注意,在所有语言中,Python 对缩进非常敏感。您编写的内容无法编译,因为您没有缩进函数的主体。我已经猜到了函数的范围。下次请务必小心。此外,当您报告“它给了我一个错误”时,请逐字引用您收到的错误消息。我认为它说明了没有第二个捕获的字符串供
\\2引用——但我们不必猜测;你应该从一开始就告诉我们。