除了字符串中匹配的模式之外,如何用字符串中的空格替换连字符( - )?

时间:2017-06-02 16:24:02

标签: python regex

我的字符串类似于

text='Studied b-tech from college in 2010-13'

使用

text.replace('-', ' ')

将产生

Studied b tech from college in 2010 13

但我想要的是:

Studied b tech from college in 2010-13

我已准备好以下格式来获取像2010-13那样的令牌,但我如何在我的代码中使用它?

regex_pattern='(\d{4}-\d{2,4})'

6 个答案:

答案 0 :(得分:1)

我认为你在寻找的是:

>>> import re
>>> text = "Studied b-tech from college in 2010-13"

>>> re.sub("\-([a-zA-Z]+)", r"\1", text)
"Studied btech from college in 2010-13"

[a-zA-Z]-之后的数字不匹配。您可以找到有关re.sub here

的更多信息

答案 1 :(得分:1)

您必须使用负面外观描述连字符的两种可能性:

  • 前面没有四位数:(?<!\b[0-9]{4})
  • 后面没有两位或四位数:(?![0-9]{2}(?:[0-9]{2})?\b)

“前面没有A 后面没有B”的否定,前面是A 后跟B“

示例:

import re

text = 'Studied b-tech from college in 2010-13'

result = re.sub(r'-(?:(?<!\b[0-9]{4}-)|(?![0-9]{2}(?:[0-9]{2})?\b))', ' ', text)

demo

(写- (?: (?<! ... - ) | (?! ... ) )(?<! ... )-|-(?! ... )效率更高,这就是你在后卫中检索连字符的原因

答案 2 :(得分:0)

replace有第三个可选参数,允许您表示您想要替换的实例。

text.replace('-',' ', 1) 

答案 3 :(得分:0)

Python的字符串replace采用max参数表示要替换的最大出现次数。

如果您只想使用第一次text.replace(*, 1)

答案 4 :(得分:0)

我会在这里用正则表达式使用Python .replace()

类似的东西:

str.replace(old, new[, max])

其中max是您要替换的实例数。如果您只想替换非数字字符串的连字符,我会使用与此问题类似的内容:How do I check if a string is a number (float) in Python?而是更改它以捕获连字符旁边的字符是否为数字。

答案 5 :(得分:0)

你只需要匹配反模式

正则表达式:(\d{0,3}(?:\D|^)\d{0,3})-(\d?(?:\D|$)\d?)
替换:$1 $2