如何使用正则表达式匹配包含至少一个大写字母但不是全部小写的特定单词?

时间:2015-09-08 15:30:58

标签: python regex

我想匹配一个特定单词“StackOverflow”,“STACKOVERFLOW”或“stACKoverFlow”等。至少应该大写一个字符,但是所有小写“stackoverflow”的单词不应该匹配。

非常感谢你的帮助。

3 个答案:

答案 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]$");

RegEx Demo

答案 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

Demo

在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)