这是我能想到的最好的:
b = re.findall(r'\b[a-zA-Z0-9_]\b', 'ahz2gb_ $f heyght78_')
但这不起作用。而且,并不是说我现在只对正则表达式感兴趣。我可以解决这个问题。
预期结果是包含[ahz2gb_,heyght78 _]
的列表答案 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_ ]+$
:严格的数字,字母,下划线和空格如果您需要匹配行中的单词,则使用空格作为分隔符进行溢出。
上在线试用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_']