如何在Python中使用正则表达式在特定字符前后添加空格?
我有这样一句话:如何在Python中使用正则表达式在特定字符前后添加空格?,python,regex,Python,Regex,我有这样一句话: kota | tua | mau ke galeri naik transjakarta jurusan apa ya国家铁路运输公司 正如你看到的,在这个句子中有两个管字符,我喜欢在管中间加上空格,如果它在单词中间没有空格。例如:kota|tuatokota|tua 这是我目前的代码: def puncNorm(text): pat = re.compile(r"\D([|:])\D") text = pat.sub(" \\1 ", text) re
kota | tua | mau ke galeri naik transjakarta jurusan apa ya国家铁路运输公司
正如你看到的,在这个句子中有两个管字符,我喜欢在管中间加上空格,如果它在单词中间没有空格。例如:kota|tua
tokota|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?
解决此问题的最佳方法是什么?模式匹配除数字以外的任何字符。您可以在此处使用单词边界,使符号仅在单词内部匹配:
r'\b([|:])\b'
见
请注意,您还可以去掉(…)
,因为您需要替换整个匹配项。在Python中,对整个匹配的反向引用是\g
见a:
重新导入
rx=r'\b[|::]\b'
s=“在雅加达附近的国家铁路运输公司?”
打印(再打印(rx,'\g',s))
#=>在雅加达附近的国家公路上的交通?
您可以在这里简单地使用量词
,如`\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?'
此
r'(\s*\\s*)(?is)
模式也将被删除。<代码>(is)>代码>修饰语在这里没有意义:没有<代码> .<代码>,也没有模式中的字母。我应该删除我的答案吗?嗯,如果你解释为什么你认为它对OP有帮助,那就没问题了。有一个要求:在没有空间的单词中间。这就是我添加注释的原因。此模式将捕获像a | b
或a | b
之类的内容,这可能是一件好事;虽然从OP有限的问题描述中还不清楚。
>>> 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?'