匹配由3个大写字母、1个小写字母和3个大写字母组成的正则表达式?

7
我需要一个在Python中匹配正好由3个大写字母、1个小写字母和正好3个大写字母组成的正则表达式。 例如,它应该匹配ASDfGHJ而不是ASDFgHJK。

9
太有趣了。我刚在查看http://www.pythonchallenge.com的第3部分时,搜索“python re capital letter”指向了这个页面。看起来原帖的作者试图作弊...令人沮丧的是,我仍然不确定如何使用答案来进入第4部分... - Stuart Berg
尝试集中注意力于整个单词组合,而不仅仅是找到一个答案。 - galfisher
5个回答

29
r'\b[A-Z]{3}[a-z][A-Z]{3}\b'

如果这是一个完整的单词,那么它将匹配您发布的内容。

r'(?<![^A-Z])[A-Z]{3}[a-z][A-Z]{3}(?![A-Z])'

只要它前面或后面没有另一个大写字母,这将匹配您发布的内容。


3
请注意,这不会匹配所有Unicode大写字母,例如,它不会匹配u"Ů" - Flimm

2

这里是:

'[A-Z]{3}[a-z]{1}[A-Z]{3}'

编辑:你需要使用单词边界:

r'\b[A-Z]{3}[a-z]{1}[A-Z]{3}\b'

3
这将与他的反例ASDFgHJK相匹配。此外,{1}是不必要的。 - agf
它将匹配ASDFgHJK。我不需要像示例中给出的那样。感谢您的帮助。 - Nitish
3
请注意,这不会匹配所有的Unicode大写字母,例如,它将不会匹配"Ů"。 - Flimm

1
re.findall(r'[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]', data)

4
虽然这段代码可能能回答问题,但最好还是加入一些上下文,解释它的工作原理和何时使用。仅有代码的回答从长远来看并不实用。 - Bono
re是正则表达式,如果其他人也要使用它,你需要导入re。 - Tyler Chong
1
请注意,这不会匹配所有 Unicode 大写字母,例如它不会匹配 u"Ů" - Flimm

0

这将检查一个小字符是否恰好出现在两侧都有3个大写字符之间。

我使用了前瞻和后顾来确保两侧恰好有三个大写字符。

r'(?<![A-Z])[A-Z]{3}[a-z][A-Z]{3}(?![A-Z])'.

-1
>>> import re
>>> pattern = r'^[A-Z]{3}[a-z]{1}[A-z]'
>>> re.match(pattern , "ABCaABC").start()
    0
>>> print re.match(pattern , "ABCABC")
    None
>>> print re.match(pattern , "ABCAABC")
    None
>>> print re.match(pattern , "ABCAaABC")
    None
>>> print re.match(pattern , "ASDFgHJK")
    None
>>> print re.match(pattern , "ABCaABC")
    <_sre.SRE_Match object at 0x011ECF70>

r'^[A-Z]{3}[a-z]{1}[A-z]'
^ ->首字母大写,所以前三个字母必须是大写。


1
你不需要 {1},他想要小写字母后面跟着 恰好 三个大写字母。 - agf
2
请注意,这不会匹配所有Unicode大写字母,例如,它不会匹配u"Ů" - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接