我想匹配一个特定单词“StackOverflow”,“STACKOVERFLOW”或“stACKoverFlow”等。至少应该大写一个字符,但是所有小写“stackoverflow”的单词不应该匹配。
非常感谢你的帮助。
答案 0 :(得分:1)
Using (?i)
in the middle of the regex won't work in Python as (?i)
will impact the entire regex:
你将不得不使用这个冗长的正则表达式:
regex = re.compile(r"^(?!stackoverflow$)[sS][tT][aA][cC][kK][oO][vV][eE][rR][fF][lL][oO][wW]$");
答案 1 :(得分:0)
这使用单词边界来确保一个单词并检查至少一个大写字母
import re
text = 'StackOverflow STACKOVERFLOW stACKoverFlow stackoverflow'
matches = re.findall(r'\b.*?[A-Z]{1}.*?\b', text)
#['StackOverflow', ' STACKOVERFLOW', ' stACKoverFlow']
这是没有正则表达式的方法。只要它至少有大写字母
,它将只匹配“stackoverflow”text = 'StackOverflow STACKOVERFLOW stACKoverFlow stackoverflow'
matches = [word for word in text.split() if any(letter.isupper() for letter in word) and word.lower() == 'stackoverflow']
#['StackOverflow', 'STACKOVERFLOW', 'stACKoverFlow']
答案 2 :(得分:0)
您可以使用此正则表达式:
\b(?=.*[A-Z])(?i)stackoverflow\b
在python中就像:
import re
p = re.compile(ur'\b(?=.*[A-Z])(?i)stackoverflow\b')
test_str = u"StackOverflow\nSTACKOVERFLOW\nstACKoverFlow\nstackoverflow\n"
re.findall(p, test_str)