匹配包含非alnums的单词边界

时间:2016-01-28 03:43:28

标签: python regex

例句......

words = "7 day f/u  with customer's."

我想在列表中存储每个单词的第一个字符的索引。这几乎有用......

>>> [match.start() for match in re.finditer(r"\b\w", words)]
[0, 2, 6, 8, 11, 16, 25]

但是,我希望相邻或在单词内的非字母数字字符被计为相邻或封闭单词的一部分。索引8和25处的字符不一定是新单词。我使用的正则表达式的一些细节...

'\ b':匹配空字符串,但仅匹配单词的开头或结尾。

'\ w':未指定LOCALE和UNICODE标志时,匹配任何字母数字字符和下划线;这相当于集[a-zA-Z0-9 _]。

https://docs.python.org/2/library/re.html

关于'\ w'的说法我得到了同样的结果......

>>> [match.start() for match in re.finditer(r"\b[a-zA-Z0-9_]", words)]
[0, 2, 6, 8, 11, 16, 25]

在括号内添加正斜杠并不能满足我的要求。

>>> [match.start() for match in re.finditer(r"\b[a-zA-Z0-9_/]", words)]
[0, 2, 6, 7, 8, 11, 16, 24, 25]

所需的输出是......     [0,2,6,11,16]

2 个答案:

答案 0 :(得分:1)

试试这段代码:

copyright

输出:words = "7 day f/u with customer." [match.start() for match in re.finditer(r"\b[a-zA-Z0-9](\/)?[a-zA-Z0-9]?", words)]

答案 1 :(得分:1)

这对我有用:

http://data.ris.ripe.net/rrc00/2016.01/updates20160128.0245.gz