0

我习惯用re.sub()替换字符串中的字母,但是插入一些东西呢?

import re
re.sub('Item', '- <thing>', 'A list of things: \nItem 1 \nItem 2')

应该返回

"A list of things: \n- Item 1 \n- Item 2"

它并没有真正替代,而是插入了一些东西。这实际上在正则表达式中是可能的,还是我应该坚持遍历整个文本并使用.replace()?我需要替换特定事物的模式,因此使用很多.replace()似乎有点不雅。

4

4 回答 4

2

您正在寻找“反向引用”。它们通常拼写\X,其中“X”是您要引用的捕获组的编号(尽管您也可以使用命名的捕获组,如果您想要更花哨的话)。

以下是如何使您的代码工作:

re.sub(r'(Item)', r'- \1', 'A list of things: \nItem1, \nItem2')
于 2013-09-26T23:00:26.167 回答
0

为什么不直接提出第二个论点- Item

>>> re.sub('Item', '- Item', 'A list of things: \nItem 1 \nItem 2')
'A list of things: \n- Item 1 \n- Item 2'
于 2013-09-26T23:00:16.537 回答
0

对于喜欢花哨的人来说,这是一种花哨的方式:

import re
re.sub('(?=Item)', '- ', 'A list of things: \nItem 1 \nItem 2')
#>>> 'A list of things: \n- Item 1 \n- Item 2'

这将搜索(?=Item),这是一个空字符串,后跟并将Item其替换为-

请注意,在现实生活中,这应该拼写:

'A list of things: \nItem 1 \nItem 2'.replace('Item', '- Item')

尽管我认为这只是因为这过于简单化了。

于 2013-09-26T23:09:00.103 回答
0

此代码工作正常:

import re

text = re.sub(r'(Item)', '- \g<1>', 'A list of things: \nItem 1 \nItem 2')
print text

祝你好运!

于 2013-09-27T02:25:40.470 回答