Python 修改正则表达式以包含连字符单词
我在另一个堆栈问题上找到了这个标记器,但是,我需要修改它,并且正在努力。它目前将连字号拆分为单独的标记,但我希望它们是单个标记 标记器:Python 修改正则表达式以包含连字符单词,python,regex,tokenize,Python,Regex,Tokenize,我在另一个堆栈问题上找到了这个标记器,但是,我需要修改它,并且正在努力。它目前将连字号拆分为单独的标记,但我希望它们是单个标记 标记器: [(m.start(0), m.end(0),m.group()) for m in re.finditer("\w+|\$[\d\.]+|\S+",target_sentence)] 给出以下句子:“半衰期是单个标记”,它应该给出以下标记(加上字符偏移量信息): 相反,它给出了: [(0, 4, 'half'), (4, 9, '-life'), (10,
[(m.start(0), m.end(0),m.group()) for m in re.finditer("\w+|\$[\d\.]+|\S+",target_sentence)]
给出以下句子:“半衰期是单个标记”,它应该给出以下标记(加上字符偏移量信息):
相反,它给出了:
[(0, 4, 'half'),
(4, 9, '-life'),
(10, 12, 'is'),
(13, 14, 'a'),
(15, 21, 'single'),
(22, 27, 'token')]
编辑:我希望字符信息不仅仅是单词标记,所以string.split不会剪切它您的正则表达式使用
\w+
匹配一半
,使用最后一个备用\S+
匹配剩余的-life
您可以使用此正则表达式捕获可选的连字号:
\w+(?:-\w+)*|\$[\d.]+|\S+
\w(?:-\w+*
将匹配一个或多个用连字符分隔的单词。试试这个-
[m.group() for m in re.finditer("[\w-]+|\$[\d\.-]+|\S+",target_sentence)]
>> ['half-life', 'is', 'a', 'single', 'token']
- 只让代码返回m.group(),而不是匹配的索引
- 在字符类中包括
字符-
print(“半衰期是一个单独的令牌“.split()”)有什么不对?
?如果您添加了\s+
选项,则使用\w+\$[\d\.]+
没有任何意义。可能重复的++ve为伟大的正则表达式先生。对不起打扰你了。请您指导我如何学习不同语言的正则表达式(如我的技术大师Anubhava sir do:),我将非常感谢您,先生。@RavinderSingh13:您已经非常擅长正则表达式了。此外,我建议使用它进行彻底的学习。
[m.group() for m in re.finditer("[\w-]+|\$[\d\.-]+|\S+",target_sentence)]
>> ['half-life', 'is', 'a', 'single', 'token']