我正在尝试编写正则表达式以在特定位置插入空格。我正在阅读html文件并试图在#WORD<tag
之间插入一个空格,因此它会#WORD <
其中WORD是一个变量,可以是任何东西,只要它是一个真正的单词(字符串)
<p style="text-align: left;" data-redator="true"> #deeds</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true">this is it #$%$%$ dkfj dlkjf dklfj </p>
在上面的示例中,我想在#deeds</p>
中插入一个空格,因此它将是#deeds </p>
我尝试使用字符串替换和re.sub,但我不知道如何在维护变量之间进行替换..
任何建议?
更新
我尝试了其中一个答案中提供的并且效果很好,但问题是它不能用于unicode字符。我尝试进行以下调整,它会选择英语单词而不是像阿拉伯语这样的unicode字符
re.sub(ur'(#\w+)(<)', ur'\1 \2', c, flags=re.UNICODE)
下面的是html的一个例子
<p style="text-align: left;" data-redator="true"> #$^$%^</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true"> #sdkjf #الكويت</p><p style="text-align: left;" data-redator="true"></p><p style="text-align: left;" data-redator="true"></p>
有什么建议吗?我使用re.UNICODE标志并尝试在正则表达式之前使用ur来解析unicode ..但没有运气
答案 0 :(得分:3)
由于您没有向我们展示您的模式,我会向您展示,并向您展示如何使其工作,并希望这将向您展示如何使您的真正的模式工作。
所以:
r = re.compile(r'#[a-z]+<')
这是一个愚蠢的模式,但它会匹配#deeds<
,所以它就是一个例子。那么,你如何在正确的位置插入空格?
您需要做的是将其捕获为单独的组:
r = re.compile(r'(#[a-z]+)(<)')
现在,您可以使用对这些组的引用:
r.sub(r'\1 \2', s)
(在这种情况下,由于你的第2组是一个静态字符串,你可以稍微简化一下 - 不要将<
放在一个组中,只需使用r'\1 <'
。但我认为它更多这种方式可读,如果你以后扩展你正在做的事情,性能成本很小,肯定会更灵活/更健壮。)
Regular Expression Syntax上的文档展示了如何使用可选名称创建捕获组,以及如何在re.sub
中引用它;向下滚动到图表'对组的引用上下文“引用”'以获取详细信息。另请参阅re.sub
。
答案 1 :(得分:1)
我认为你的更高层次问题有两个正确的解决方案: