簡體   English   中英

您如何在python中編寫正則表達式,以查找僅包含字母,數字和下划線的所有單詞?

[英]How do you write a regex in python that finds all word which contain only letters, numbers and underscore?

這是我能想到的最好的方法:

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

但這是行不通的。 另外,不是我目前只對正則表達式感興趣。 我可以解決很長的路要走的問題。

預期結果是一個包含[ahz2gb_,heyght78_]的列表

\\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)意思是:不能是前面的非空白字符。

然后(?!是相似的,但是期待(不匹配)。

正則表達式很容易理解。

  • ^[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_']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM