我需要什么正则表达式来找到3个大写字母,其中1个小写字母?
例如,我有:sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH
但是我需要:AHHdHSA
我是正则表达式的新手,但是类似[A-Z]{3}[a-z]{1}[A-Z]{3}
的东西也会找到HHHfHHH
,但是我只需要3个大写字母,下一个就需要小写字母。我需要获取AHHdHSA
。
答案 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])
负向查找,在右边断言没有大写字符答案 1 :(得分:1)
也许
(?<=[^A-Z]|^)[A-Z]{3}[a-z][A-Z]{3}(?=[^A-Z]|$)
那会做的。
我想实现此模式,我们可能希望安装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中查看它如何与某些示例输入匹配。
this link可视化正则表达式:
答案 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)