我想編寫一個正則表達式,它匹配所有包含字母數字字符+下劃線的單詞,但不包含相鄰兩個下劃線的單詞。其實我要選擇的話下面的正則表達式匹配,但不包含 「__」正則表達式匹配沒有兩個下劃線的單詞
正則表達式:[A-Za-z](\w){3,}[A-Za-z0-9]
匹配例如:123dfgkjdflg4_aaa
,ad
,12354
不匹配例如:1246asd__
我想編寫一個正則表達式,它匹配所有包含字母數字字符+下劃線的單詞,但不包含相鄰兩個下劃線的單詞。其實我要選擇的話下面的正則表達式匹配,但不包含 「__」正則表達式匹配沒有兩個下劃線的單詞
正則表達式:[A-Za-z](\w){3,}[A-Za-z0-9]
匹配例如:123dfgkjdflg4_aaa
,ad
,12354
不匹配例如:1246asd__
你可以使用
\b[a-z0-9A-Z]*__\w*\b|(\b[A-Za-z0-9]\w*[A-Za-z0-9]\b)
而且使用第一組,請參閱a demo on regex101.com。
Python
這可能是
import re
rx = re.compile(r'\b[a-z0-9A-Z]*__\w*\b|(\b[A-Za-z0-9]\w*[A-Za-z0-9]\b)')
words = ['a__a', '123dfgkjdflg4_', 'ad', '12354', '1246asd__', 'test__test', 'test']
nwords = [match.group(1)
for word in words
for match in [rx.search(word)]
if match and match.group(1) is not None]
print(nwords)
# ['ad', '12354', 'test']
或字符串中:
import re
rx = re.compile(r'\b[a-z0-9A-Z]*__\w*\b|(\b[A-Za-z0-9]\w*[A-Za-z0-9]\b)')
string = "a__a 123dfgkjdflg4_ ad 12354 1246asd__ test__test test"
nwords = filter(None, rx.findall(string))
print(nwords)
# ['ad', '12354', 'test']
words = ['a__a', '123dfgkjdflg4_', 'ad', '12354', '1246asd__', 'test__test', 'test']
nwords = [word
for word in words
if "__" not in word and not (word.startswith('_') or word.endswith('_'))]
print(nwords)
# ['ad', '12354', 'test']
爲什麼python和djang o標記? – gommb
你是否需要用正則表達式來做呢?只是檢查'__'不在字符串中 –
@MJafarMash想要將它添加到此正則表達式中「[A-Za-z](\ w){3,} [A-Za-z0-9]」 – mohammad