如何使用正则表达式替换空格中的字符间的短划线

时间:2015-10-13 21:57:03

标签: python regex

我想用正则表达式替换出现在带空格的字母之间的短划线。例如,将ab-cd替换为ab cd

以下匹配字符 - 字符序列,但也替换字符[即ab-cd会产生a d,而不是{我想要的ab cd

 new_term = re.sub(r"[A-z]\-[A-z]", " ", original_term)

我如何调整以上内容仅替换-部分?

4 个答案:

答案 0 :(得分:6)

使用对捕获组的引用:

>>> original_term = 'ab-cd'
>>> re.sub(r"([A-z])\-([A-z])", r"\1 \2", original_term)
'ab cd'

当然,这假定您无论出于何种原因都不能original_term.replace('-', ' ')。也许你的文本使用连字符,它应该使用短划线或其他东西。

答案 1 :(得分:6)

您需要将<{>>之前的字符 之后的字符捕获到组中,然后使用它们进行替换,即:

-

<强>样本

http://ideone.com/LAYQWT

REGEX EXPLANATION

import re
subject = "ab-cd"
subject = re.sub(r"([a-z])\-([a-z])", r"\1 \2", subject , 0, re.IGNORECASE)
print subject
#ab cd

答案 2 :(得分:2)

document.getElementById("myDiv").style.webkitAnimationPlayState = "running"; 总是用替换序列替换整个匹配的序列。

仅替换短划线的解决方案是 lookahead lookbehind 断言。它们不计入匹配的序列。

re.sub()

语法在Python documentation for the re module中解释。

答案 3 :(得分:1)

您需要使用环视:

 new_term = re.sub(r"(?i)(?<=[A-Z])-(?=[A-Z])", " ", original_term)

或捕获群组:

 new_term = re.sub(r"(?i)([A-Z])-([A-Z])", r"\1 \2", original_term)

请参阅IDEONE demo

请注意,[A-z]也会匹配一些非字母(即[\]^_和{ {1}})因此,我建议将其替换为`并使用不区分大小写的修饰符[A-Z]

请注意,您不必转义字符类之外的连字符。