python - 修改正则表达式以包含带连字符的单词

标签 python regex tokenize

我在另一个堆栈问题上找到了这个分词器,但是,我需要修改它并且正在努力。它目前将带连字符的单词拆分为单独的标记,但我希望它们是单个标记。

分词器:

[(m.start(0), m.end(0),m.group()) for m in re.finditer("\w+|\$[\d\.]+|\S+",target_sentence)]

给定以下句子:“half-life is a single token”它应该给出以下标记(加上字符偏移信息):

['half-life', 'is', 'a', 'single', 'token']

相反,它给出:

[(0, 4, 'half'),
(4, 9, '-life'),
(10, 12, 'is'),
(13, 14, 'a'),
(15, 21, 'single'),
(22, 27, 'token')]

编辑:我想要字符信息而不仅仅是单词标记,所以 string.split 不会削减它

最佳答案

您的正则表达式使用 \w+ 匹配 half 并使用最后一个备用 \S+ 匹配剩余的 -life

您可以使用此正则表达式来捕获可选的带连字符的单词:

\w+(?:-\w+)*|\$[\d.]+|\S+

RegEx Demo

\w(?:-\w+)* 将匹配 1 个或多个由连字符分隔的单词。

关于python - 修改正则表达式以包含带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679128/

相关文章:

python - 如何在Python中计算非中心f分布的逆?

java - 正则表达式在方法 replaceAll() 中不起作用 - Android

XSLT 标记化节点集

python - Python 中使用 Pygments 的分词器

php - 如何使用 token_get_all() 查找范围级别?

Python字典获取不同列表计数

python - iPython NoteBook 的 MathJax 符号帮助

java - 正则表达式提取两个给定字符串之间最后一次出现的文本

java - 正则表达式获取双引号和括号内的字符串

python - batch_size = 1 的 tensorflow 中的不同图像大小