Python使用regex从字符串中删除最后一个字符

2024-05-17 12:41:09 发布

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

我知道还有很多其他的正则表达式问题,但我希望有人能指出我的正则表达式有什么问题。我对它做了一些研究,看来应该行得通。我用rubular来测试它,是的,我知道这是ruby的regex,但是我使用的相同规则应该适用于python,从它在python docs中的样子来看

目前我有

a = ["SDFSD_SFSDF234234","SDFSDF_SDFSDF_234324","TSFSD_SDF_213123"]
c = [re.sub(r'[A-Z]+', "", x) for x in a]

它回来了

^{pr2}$

但我希望它能回来

['SDFSD_SFSDF', 'SDFSDF_SDFSDF', 'TSFSD_SDF']

我试着用这个正则表达式

c = [re.sub(r'$?_[^A-Z_]+', "", x) for x in a]

但我得到了这个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/re.py", line 151, in sub
    return _compile(pattern, 0).sub(repl, string, count)
  File "/usr/lib64/python2.6/re.py", line 245, in _compile
    raise error, v # invalid expression

谁能帮我弄清楚我做错了什么吗?在


Tags: inpyreforusrlinefilecompile
3条回答

错误在于:

c = [re.sub(r'$?_[^A-Z_]+', "", x) for x in a]

是由?引起的,它前面没有任何字符,因此它不知道匹配0或1次的内容。如果将其更改为:

^{pr2}$

正如你所期望的那样。在

还有一件事,$是用来引爆行尾的,所以它可能不应该是第一个字符。在

import re

a = ["SDFSD_SFSDF234234","SDFSDF_SDFSDF_234324","TSFSD_SDF_213123"]
c = [re.match(r'[A-Z_]+[A-Z]', x).group() for x in a]

print c

结果:

^{pr2}$

请注意,那“re.sub公司“您在示例中使用的是regex replace命令,而不是搜索。你的正则表达式似乎与你所要求的匹配,而不是你为了得到你想要的东西而试图摆脱的东西。在

没有使用^{}的正则表达式:

a = ["ends_with_underscore_", "does_not", "multiple_____"]
b = [ x.rstrip("_") for x in a]
print b
^{pr2}$

相关问题 更多 >