正则表达式:如果倒数第二个字符是大写,是否截断最后一个字符?
我想要把字符串最后一个字符去掉,前提是这个字符是小写字母,并且倒数第二个字符是大写字母。比如说。
14-ME -> 14-ME
MEA -> MEA
MEAm -> MEA #like this one
mama -> mama
我该怎么写正则表达式呢?我在想用 r"(.+?)" 这样的写法,但不太确定怎么在最后部分做条件判断。这个字符串里面可能还会有像 ()-,+ 这样的符号。
谢谢!
4 个回答
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
我不太确定你是否想要匹配字符串的结尾,但我的正则表达式就是这么做的。
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
其实你不需要用正则表达式来解决这个问题,写一段简单的代码就可以了。
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