我的任务是使用正则表达式对语料库中的单词进行标记,但是我无法将缩写标记为“例如”或“即”。特别是,我正在查看的语料库中出现的那个显示为'(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.正在重复
答案 0 :(得分:0)
拆分包括所有捕获组。使用(?:...)
创建围绕\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个字符;你必须再次过滤掉它们。