你如何在python中编写一个正则表达式,找到只包含字母,数字和下划线的所有单词?

时间:2017-08-01 08:34:08

标签: python regex

这是我能想到的最好的:

b = re.findall(r'\b[a-zA-Z0-9_]\b', 'ahz2gb_ $f heyght78_')

但这不起作用。而且,并不是说我现在只对正则表达式感兴趣。我可以解决这个问题。

预期结果是包含[ahz2gb_,heyght78 _]

的列表

2 个答案:

答案 0 :(得分:4)

\w用于捕获这些字符,并且您需要允许多个字符+

b = re.findall(r'\b\w+\b', 'ahz2gb_ $f heyght78_')

由于+贪婪,你真的不需要\b

b = re.findall(r'\w+', 'ahz2gb_ $f heyght78_')

如果您只需要用空格分割单词(不是\b),那么您可以使用环视:

b = re.findall(r'(?<!\S)\w+(?!\S)', 'ahz2gb_ $f heyght78_')

(?<!序列意味着:回头看看你在目标字符串中当前匹配位置之前的(?<!之后没有模式。所以在这种情况下(?<!\S)表示:不应该有前面的非空白字符。

然后(?!类似,但期待(没有匹配)。

答案 1 :(得分:2)

简单易懂将是正则表达式。

  • ^[0-9a-zA-Z_]+$:严格的数字,字母和下划线
  • ^[0-9a-zA-Z_ ]+$:严格的数字,字母,下划线和空格

如果您需要匹配行中的单词,则使用空格作为分隔符进行溢出。

您可以在http://pythex.org/

上在线试用python regex

在IDLE上运行示例

>>> import re
>>> re.findall(r'^[a-zA-Z0-9_ ]+$', 'ahz2gb_ f heyght78_')[0].split(' ')
['ahz2gb_', 'f', 'heyght78_']

EDIT:鉴于只有单词的新要求,以下是如何实现相同的目标。

import re
mylist =  'ahz2gb_ $f heyght78_'.split(' ')
r = re.compile("^[0-9a-zA-Z_]+$")
newlist = list(filter(r.match, mylist))
print(newlist)

希望,我可以缩短它!!

示例运行

========= RESTART: C:/regex.py =========
['ahz2gb_', 'heyght78_']