正则表达式:如果倒数第二个字符是大写字母,则去掉最后一个字符?

2024-07-02 12:55:44 发布

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

如果最后一个字符是小写字母,倒数第二个字符是大写字符,我想把它切掉。例如。在

14-ME -> 14-ME
MEA  -> MEA
MEAm -> MEA  #like this one
mama -> mama

如何编写regx?我在想r“(.+?)”但不知道如何对最后一部分做有条件的事情。这个词也可以是()-,+之类的。在

谢谢


Tags: this条件字符事情onelikeme大写
3条回答

尝试r"(.+[A-Z])[a-z]\b"。在

import re
regex = r"(.+[A-Z])[a-z]\b"

re.match(regex,'14-ME') # None
re.match(regex,'MEA') # None
re.match(regex,'MEAm') # <_sre.SRE_Match object at 0x.. >
re.match(regex,'mama') # None

对于那些匹配的对象,可以使用.group获取除最后一个字符外的所有对象:

^{pr2}$

当您可以编写一段简单的代码来实现这一点时,不需要使用正则表达式。在

def chop_char(some_string):
    try:
        # determine if the second to last character is upper case
        if some_string[-2].istitle() and not some_string[-1].istitle():
            return some_string[:-1] # slice off the last character
    except IndexError:
        # string isn't long enough to have a 2nd to last char (i.e. it's only 1 character)
        pass
    return some_string

或者如果你不想要例外的东西。。。在

^{pr2}$

下面是我如何使用regexp。在

strings = ["14-ME","MEA","MEAm","mama"]
p = re.compile(r"([A-Z])[a-z]$")
for s in strings:
    print p.sub(r"\1", s)

这给了

^{pr2}$

我不清楚您是否希望它匹配字符串的结尾,但这就是我的regexp所做的。在

相关问题 更多 >