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

时间:2011-12-16 04:51:12

标签: python regex

如果是小写的话我想砍掉最后一个字符而第二个是大写的。例如。

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

如何写regx?我在考虑像r“(。+?)”这样的东西,但不知道如何在最后一部分做有条件的事情。这个词可以有像() - ,+这样的东西。

感谢

4 个答案:

答案 0 :(得分:2)

当你可以编写一段简单的代码来执行此操作时,真的不需要正则表达式。

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

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

def chop_char(s):
    if len(s) > 1:
        if s[-2].istitle() and not s[-1].istitle():
            return s[:-1]
    return s

答案 1 :(得分:1)

试试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抓取除最后一个字符以外的所有字符:

a = re.match(regex,'MEAm')
a.group(1) # 'MEA'

答案 2 :(得分:1)

以下是我使用正则表达式的方法。

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

给出了

14-ME
MEA
MEA
mama

我不清楚你是否希望它匹配字符串的结尾,但这就是我的正则表达式所做的。

答案 3 :(得分:0)

我对python正则表达式(或者任何正则表达式)一无所知,但你可能想要匹配一些东西:[大写字母列表] [小写字母列表] [词尾]