我有这句话:
transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?
正如你所看到的那句话中有两个管道字符,我想在管道之前和之后添加空格,如果它在没有空格的单词中间。例如:kota|tua
到kota | 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?
解决这个问题的最佳方法是什么?
答案 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?'