【问题标题】:What does the following re code mean?以下 re 代码是什么意思?
【发布时间】: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\\3sub 函数中的作用,那将是惊人的。此外,我将输入更改为 Mr... Ansh sahajpal,并在第 5 行进行了以下更改:

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

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

【问题讨论】:

  • 您的问题不在主题范围内,因为您正在寻求调试帮助。如果您逐行运行调试器,您可以理解您的代码的作用。顺便说一句,\1\someNumber 是正则表达式捕获组索引,所以如果你的正则表达式捕获hello,那么如果你使用\1,你指的是你好,所以\1\1 将是hellohello
  • 请注意,在所有语言中,Python 对缩进非常敏感。您编写的内容无法编译,因为您没有缩进函数的主体。我已经猜到了函数的范围。下次请务必小心。此外,当您报告“它给了我一个错误”时,请逐字引用您收到的错误消息。我认为它说明了没有第二个捕获的字符串供\\2 引用——但我们不必猜测;你应该从一开始就告诉我们。

标签: python regex replace


【解决方案1】:

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

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

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

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

an example word:dog!!

在这种情况下,(\w+) 是一组包含“_”的字母数字字符的分组表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多