查找大写字母,中间包含一个小写字母

时间:2019-11-12 21:52:17

标签: python regex python-3.x

我需要什么正则表达式来找到3个大写字母,其中1个小写字母?

例如,我有:sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH

但是我需要:AHHdHSA

我是正则表达式的新手,但是类似[A-Z]{3}[a-z]{1}[A-Z]{3}的东西也会找到HHHfHHH,但是我只需要3个大写字母,下一个就需要小写字母。我需要获取AHHdHSA

3 个答案:

答案 0 :(得分:4)

您可以使用lookarounds在3个大写字符前后声明一个大写字符。

(?<![A-Z])[A-Z]{3}[a-z][A-Z]{3}(?![A-Z])
  • (?<![A-Z])向后看是负数,请断言左侧没有大写字母char
  • [A-Z]{3}匹配3个大写字符A-Z
  • [a-z]匹配一个小写字符(请注意,您可以省略{1}
  • [A-Z]{3}匹配3个大写字符
  • (?![A-Z])负向查找,在右边断言没有大写字符

Regex demo

答案 1 :(得分:1)

也许

(?<=[^A-Z]|^)[A-Z]{3}[a-z][A-Z]{3}(?=[^A-Z]|$)

那会做的。

[class.virtual]


我想实现此模式,我们可能希望安装regex模块,

$ pip3 install regex

否则,我认为模式Demo是一个更好的选择,您可以使用re模块来实现它:

import re

string = '''
sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH
AHHdHSA
'''

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

print(re.findall(expression, string))

测试

import regex as re

string = '''
sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH
AHHdHSA
'''

expression = r'(?<=[^A-Z]|^)[A-Z]{3}[a-z][A-Z]{3}(?=[^A-Z]|$)'

print(re.findall(expression, string))

输出

['AHHdHSA', 'AHHdHSA']

如果您希望简化/修改/探索表达式,请在in this answer的右上角进行说明。如果愿意,您还可以在regex101.com中查看它如何与某些示例输入匹配。


RegEx电路

this link可视化正则表达式:

jex.im

答案 2 :(得分:0)

您可以使用组来确保您在抓取图案的同时还对其进行了匹配:

# to match your pattern with a lowercase letter after
pat1 = re.compile('([A-Z]{3}[a-z]{1}[A-Z]{3})([a-z]+)')

# should yield what you need
pat1.search('sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH').group(1)

# as an explanation for group capture, run this:
mymatch = pat1.search('sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH')
mymatch.group(0)
mymatch.group(1)
mymatch.group(2)