从任一方向匹配某些字符时regex python

时间:2016-06-24 10:34:57

标签: python regex

我有这样的事情:

text = "hey;)there"

需要这个:

text = "hey ;) there"

我正在做2次传球:

op_1 = re.sub(r'([a-zA-Z])([:;()])', r'\1 \2', text)
final_result = re.sub(r'([:;()])([a-zA-Z])', r'\1 \2', op_1)

我相信必须有一个有效的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用前瞻和后视替换

>>> re.sub('(?<=[a-zA-Z])(?=[:;()])|(?<=[:;()])(?=[a-zA-Z])', ' ', text)
'hey ;) there'

正则表达式细分

(?<=[a-zA-Z]) #Lookbehind to match an alphabet
(?=[:;()]) #Lookahead to match the position of signs
| Alternation(OR)
(?<=[:;()]) #Lookbehind to match the position of signs
(?=[a-zA-Z]) #Lookahead to match an alphabet