使用正则表达式拆分字符串,如何忽略撇号?

Split string using regular expression, how to ignore apostrophe?

我正在 Python 中做一个拼写检查教程,它使用这个正则表达式:

import re
def split_line(line):
    return re.findall('[A-Za-z]+(?:\`[A-Za-z)+)?',line)

我想知道你是否可以帮助我更改此函数,使其忽略 ',即如果我输入字符串 he's,我将得到 ['he's'] 而不是 [=14] =].

首先,您需要修复原始表达式,如 Marcin 所述,将 ) 替换为 ]。然后只需将 ' 添加到允许字符列表(用反斜杠转义):

import re
def split_line(line):
    return re.findall('[A-Za-z\']+(?:\`[A-Za-z]+)?',line)

split_line("He's my hero")

#["He's", 'my', 'hero']

当然,这不会考虑撇号在单词开头或结尾的任何边缘情况。

您的正则表达式应该匹配一个或多个字母,然后可选地出现一个反引号,然后再匹配一个或多个字母。您可以将反引号放入字符 class 并将 ' 添加到 class.

请注意,如果您使用 double-quoted 字符串文字,则无需转义 '

re.findall(r"[A-Za-z]+(?:['`][A-Za-z]+)*", line)

regex demo详情:

  • [A-Za-z]+ - 一个或多个 ASCII 字母(使用 [^\W\d_]+ 匹配任何一个或多个 Unicode 字母)
  • (?:['`][A-Za-z]+)* - ' 或后跟一个或多个 ASCII 字母的反引号出现零次或多次。

参见 Python demo:

import re
text = "And he's done it o`key!"
print(re.findall(r"[A-Za-z]+(?:['`][A-Za-z]+)*", text))
# => ['And', "he's", 'done', 'it', 'o`key']