如果是小写的话我想砍掉最后一个字符而第二个是大写的。例如。
14-ME -> 14-ME
MEA -> MEA
MEAm -> MEA #like this one
mama -> mama
如何写regx?我在考虑像r“(。+?)”这样的东西,但不知道如何在最后一部分做有条件的事情。这个词可以有像() - ,+这样的东西。
感谢
答案 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正则表达式(或者任何正则表达式)一无所知,但你可能想要匹配一些东西:[大写字母列表] [小写字母列表] [词尾]