使用正则表达式拆分字符串,如何忽略撇号?
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']
我正在 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']