如何在Python中使用正则表达式在特定字符之前和之后添加空格?

时间:2017-08-18 07:06:23

标签: python regex

我有这句话: transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?

正如你所看到的那句话中有两个管道字符,我想在管道之前和之后添加空格,如果它在没有空格的单词中间。例如:kota|tuakota | tua

到目前为止,这是我的代码:

def puncNorm(text):
    pat = re.compile(r"\D([|:])\D")
    text = pat.sub(" \\1 ", text)
    return text

text = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?"

text = puncNorm(text)

结果为每个管道角色添加空间。所以tua | mau中有双倍空格:

transportumum min kalo dari kota | tua  |  mau ke galeri nasional naik transjakarta jurusan apa ya?

我的预期结果是:

transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya?

解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

\D模式匹配除数字之外的任何字符。您可以在此处使用单词边界,使符号仅在单词内匹配时:

r'\b([|:])\b'

请参阅regex demo

请注意,您还可以删除(...),因为您需要替换整个匹配项。 Python中的\g<0>是对整个匹配的反向引用。

查看Python demo

import re
rx = r'\b[|:]\b'
s = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?"
print(re.sub(rx, ' \g<0> ', s))
# => transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya?

答案 1 :(得分:1)

您可以在此处使用quantifiers,例如`\ s *

*表示0或更多前面的表达式

>>> text = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?"
>>> re.sub(r'(\s*\|\s*)',' | ',text)
'transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya?'