在大写字母和小写字母之间找到一个大写字母

2024-03-29 11:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要什么正则表达式才能找到3个大写字母和1个小写字母?你知道吗

例如,我有:sDdDSADadasAHHdHSAsdsagfGoHHHfHHHH

但我需要:AHHdHSA

我对正则表达式不太熟悉,但是像[A-Z]{3}[a-z]{1}[A-Z]{3}这样的东西也会找到HHHfHHH,但是我只需要3个大写字母,下一个必须是小写字母。我需要得到AHHdHSA。你知道吗


Tags: 大写字母小写字母ahhdhsahhhfhhhsdddsadadasahhdhsasdsagfgohhhfhhhh
3条回答

您可以使用组来确保在获取模式的同时也在其周围进行匹配:

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

可以使用lookarounds在3个大写字符之前和之后声明非大写字符。你知道吗

(?<![A-Z])[A-Z]{3}[a-z][A-Z]{3}(?![A-Z])
  • (?<![A-Z])负的lookback,在左边断言no uppercase char
  • [A-Z]{3}匹配3个大写字符A-Z
  • [a-z]匹配单个小写字符(注意可以省略{1}
  • [A-Z]{3}匹配3个大写字符
  • (?![A-Z])负向前看,在右边不断言大写字符

Regex demo

也许吧

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

那就行了。你知道吗

Demo


我想要实现这个模式,我们可能需要安装regex模块

$ pip3 install regex

否则,我认为模式in this answer将是一个更好的选择,您可以使用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']

如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经解释过了。如果您愿意,还可以在this link中查看它与一些示例输入的匹配情况。你知道吗


正则表达式电路

jex.im可视化正则表达式:

enter image description here

相关问题 更多 >