Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用正则表达式在特定字符前后添加空格?_Python_Regex - Fatal编程技术网

如何在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
to
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?

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

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

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?'