我的字符串类似于
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})'
答案 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)
(写- (?: (?<! ... - ) | (?! ... ) )
比(?<! ... )-|-(?! ... )
效率更高,这就是你在后卫中检索连字符的原因
答案 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