【发布时间】:2017-12-06 14:08:22
【问题描述】:
假设我有一个这样的字符串:
s = '(X_xy09 and X_foobar or (X_abc123 and X_something))'
我想把它变成
'(xy09 and foobar or (abc123 and something))'
那么 - 在这种特殊情况下 - 我可以简单地做
s.replace('X_', "")
它给出了所需的输出。
但是,在我的实际数据中,可能不仅有X_,还有其他前缀,所以上面的replace语句不起作用。
我需要的是替换
一个大写字母后跟一个下划线和任意的字母和数字序列
通过
第一个下划线之后的所有内容。
所以,要提取我可以使用的所需元素:
import re
print(re.findall('[A-Z]{1}_[a-zA-Z0-9]+', s))
打印出来的
['X_xy09', 'X_foobar', 'X_abc123', 'X_something']
我现在如何替换这些元素以便获得
'(xy09 and foobar or (abc123 and something))'
?
【问题讨论】:
-
尝试使用
re.sub? -
@WiktorStribiżew:很想,但不知道如何在这种情况下使用它。如果您知道如何,请随时将其发布为答案... :)
-
试试ideone.com/Qs9ldO。模式的确切标准是什么?它应该以单词边界开头还是仅在
(之后? -
@WiktorStribiżew:啊,反向引用!太好了,解决了。请将其发布为答案,然后我赞成并接受。模式就像描述的那样简单:大写字母、下划线、一些任意的东西。并不总是有
(参与。 -
re.sub(r'[A-Z]_(?=[a-zA-Z0-9])', '', s)
标签: python regex string replace