我想用正则表达式替换出现在带空格的字母之间的短划线。例如,将ab-cd
替换为ab cd
以下匹配字符 - 字符序列,但也替换字符[即ab-cd
会产生a d
,而不是{我想要的ab cd
new_term = re.sub(r"[A-z]\-[A-z]", " ", original_term)
我如何调整以上内容仅替换-
部分?
答案 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)
您需要将<{>>之前的字符 之后的字符捕获到组中,然后使用它们进行替换,即:
-
<强>样本强>
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()
答案 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]
。
请注意,您不必转义字符类之外的连字符。