使用正则表达式拆分字符串
splitting a string using regular expression
我的任务是使用正则表达式对语料库中的单词进行标记,但我在标记 "e.g." 或 "i.e." 等缩写时遇到了问题。特别是,我正在查看的语料库中出现的那个显示为 '(N.B.--I'
string = '(N.B.--I'
pattern = r'(\w\.){2,}'
split_p = r'((\w\.){2,})'
match = re.search(pattern, string)
print(match)
split = re.split(split_p, string)
print(split)
['(', 'N.B.', '--', 'I']
是所需的输出列表拆分但是当我 运行 它...
<_sre.SRE_Match object; span=(1, 5), match='N.B.'>
['(', 'N.B.', 'B.', '--I']
我相信我可以用 |-+ 拆分破折号
但是,我不明白这个B.为什么要重复
拆分包括所有 捕获 组。使用 (?:...)
围绕 \w.
子模式创建一个非捕获组:
split_p = r'((?:\w\.){2,})'
演示:
>>> import re
>>> split_p = r'((?:\w\.){2,})'
>>> string = '(N.B.--I'
>>> re.split(split_p, string)
['(', 'N.B.', '--I']
下一步,如果你想在重复的破折号上拆分,只需添加一个替代模式 |
:
split_p = r'((?:\w\.){2,}|-+)'
演示:
>>> split_p = r'((?:\w\.){2,}|-+)'
>>> re.split(split_p, string)
['(', 'N.B.', '', '--', 'I']
这给出了中间的空字符串,因为在 N.B.
分割点和 --
点之间有 0 个字符;你必须再次过滤掉那些。
我的任务是使用正则表达式对语料库中的单词进行标记,但我在标记 "e.g." 或 "i.e." 等缩写时遇到了问题。特别是,我正在查看的语料库中出现的那个显示为 '(N.B.--I'
string = '(N.B.--I'
pattern = r'(\w\.){2,}'
split_p = r'((\w\.){2,})'
match = re.search(pattern, string)
print(match)
split = re.split(split_p, string)
print(split)
['(', 'N.B.', '--', 'I']
是所需的输出列表拆分但是当我 运行 它...
<_sre.SRE_Match object; span=(1, 5), match='N.B.'>
['(', 'N.B.', 'B.', '--I']
我相信我可以用 |-+ 拆分破折号
但是,我不明白这个B.为什么要重复
拆分包括所有 捕获 组。使用 (?:...)
围绕 \w.
子模式创建一个非捕获组:
split_p = r'((?:\w\.){2,})'
演示:
>>> import re
>>> split_p = r'((?:\w\.){2,})'
>>> string = '(N.B.--I'
>>> re.split(split_p, string)
['(', 'N.B.', '--I']
下一步,如果你想在重复的破折号上拆分,只需添加一个替代模式 |
:
split_p = r'((?:\w\.){2,}|-+)'
演示:
>>> split_p = r'((?:\w\.){2,}|-+)'
>>> re.split(split_p, string)
['(', 'N.B.', '', '--', 'I']
这给出了中间的空字符串,因为在 N.B.
分割点和 --
点之间有 0 个字符;你必须再次过滤掉那些。