我正在尝试从字符串中剥离一个字符,除非该字符位于字符串的开头。
到目前为止,我的代码如下:
def strip_string(value):
return re.sub(r"[^0-9\.]",'',value)
# strip_string('1-23') => '123'
我只想删除第一个字符没有的破折号:
strip_string('-1-23') => '-123'
我知道如何定位作为第一个字符(r"^-"
)而不是反字符的破折号。
是否可以执行此操作,或者是否需要以其他方式处理?
答案 0 :(得分:2)
从不在开头的字符串中删除字符的最简单解决方案是使用(?!^)
/ (?!\A)
否定先行。但是,您不能只使用re.sub(r"(?!^)[^0-9.]",'',value)
,因为它也不会删除非连字符,而您的情况暗示您期望只在开始时保留连字符。
因此,在Python 3.5及更高版本中,您可以使用(请参阅demo):
re.sub(r"^(-)|[^0-9.]+", r"\1", value)
或者,您可能会退回到
re.sub(r"(?!^)-|[^0-9.-]+", "", value) # This one is somewhat easier to understand
re.sub(r"-(?<!^-)|[^0-9.-]+", "", value) # This one is a bit more efficient
-(?<!^-)
和(?!^)-
都与不在字符串开头的-
匹配。