参考re.sub。中的事件

时间:2013-09-26 22:55:33

标签: python regex

我习惯使用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"

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

4 个答案:

答案 0 :(得分:2)

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

以下是如何使代码正常工作:

re.sub(r'(Item)', r'- \1', 'A list of things: \nItem1, \nItem2')

答案 1 :(得分:0)

为什么不制作第二个参数- Item

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

答案 2 :(得分: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')

虽然我认为这只是'因为这过于简单。

答案 3 :(得分:0)

此代码可以正常工作:

import re

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