Python正则表达式间距

时间:2013-12-24 13:24:04

标签: python regex text

我有一句话:“这不是一个好句子”我试图在单词not之后插入一个下划线(_)。我现在使用的代码是

i = "this is not a good sentence"
i = re.sub(r'(not)', r'\1_', i)

此输出:“这不是一个好句子

我希望它输出:“这不是一个好句子

如果没有句子移位我怎么分?我希望“”和“ a ”由下划线连接,但现在有一个空格。

5 个答案:

答案 0 :(得分:5)

您根本不需要RegEx,只需将not替换为not_

即可
i = "this is not a good sentence"
i = i.replace("not ", "not_")

答案 1 :(得分:2)

你快到了。您只需要使正则表达式使用空格而不将它们包含在捕获组中。这可以通过添加\s*

来完成
In [8]: re.sub(r'\b(not)\s*\b', r'\1_', i)
Out[8]: 'this is not_a good sentence'

请注意我是如何使用字边界(\b)来确保not永远不会在单词的中间匹配。

另一种方法是使用positive lookbehind

In [17]: re.sub(r'(?<=\bnot\b)\s*', r'_', i)
Out[17]: 'this is not_a good sentence'

答案 2 :(得分:1)

如果确实想要使用正则表达式:

i=re.sub(r'(not)\s?', r'\1_', i)

或指定字边界以确保其与not而非notionknot匹配:

i=re.sub(r'(\bnot\b)\s?', r'\1_', i)

答案 3 :(得分:0)

i = "this is not a good sentence"
i = re.sub(r'(not) +', r'\1_', i)

只需在查找中包含空格。

答案 4 :(得分:0)

只需在匹配的正则表达式中添加一个空格:

i = "this is not a good sentence"
i = re.sub(r'(not) ', r'\1_', i)