使用正则表达式匹配不以某个字母开头的单词

时间:2018-05-16 15:13:27

标签: python regex regex-negation regex-lookarounds

我正在学习正则表达式但是无法在python中找到正确的正则表达式来选择以特定字母开头的字符。

以下示例

text='this is a test'
match=re.findall('(?!t)\w*',text)

# match returns
['his', '', 'is', '', 'a', '', 'est', '']

match=re.findall('[^t]\w+',text)

# match
['his', ' is', ' a', ' test']

预期:['is','a']

2 个答案:

答案 0 :(得分:5)

使用正则表达式

使用否定集[^\Wt]匹配任何非 t 的字母数字字符。要避免匹配单词的子集,请在模式的开头添加单词边界元字符\b

另外,不要忘记你应该使用原始字符串来表示正则表达式。

import re

text = 'this is a test'
match = re.findall(r'\b[^\Wt]\w*', text)

print(match) # prints: ['is', 'a']

请参阅演示here

没有正则表达式

请注意,如果没有正则表达式,这也是可以实现的。

text = 'this is a test'
match = [word for word in text.split() if not word.startswith('t')]

print(match) # prints: ['is', 'a']

答案 1 :(得分:1)

你几乎走在正确的轨道上。你刚忘了\b(字边界)令牌:

\b(?!t)\w+

Live demo