我有一个字符串,例如可以-
包含一些空格。
我希望在Python中使用正则表达式只有在它出现在所有其他非空白字符之前或在所有非空格字符之后才能删除-
。还想删除开头或结尾的所有空格。
例如:
string = ' - test '
它应该返回
string = 'test'
或:
string = ' -this - '
它应该返回
string = 'this'
或:
string = ' -this-is-nice - '
它应该返回
string = 'this-is-nice'
答案 0 :(得分:8)
你不需要正则表达式。 str.strip
strip会删除传递给它的所有字符组合,因此请将' -'
或'- '
传递给它。
>>> s = ' - test '
>>> s.strip('- ')
'test'
>>> s = ' -this - '
>>> s.strip('- ')
'this'
>>> s = ' -this-is-nice - '
>>> s.strip('- ')
'this-is-nice'
删除任何类型的空格字符,'-'
使用string.whitespace + '-'
。
>>> from string import whitespace
>>> s = '\t\r\n -this-is-nice - \n'
>>> s.strip(whitespace+'-')
'this-is-nice'
答案 1 :(得分:1)
import re
out = re.sub(r'^\s*(-\s*)?|(\s*-)?\s*$', '', input)
这将在字符串的开头最多删除一个-
的实例,并在字符串的末尾删除最多一个-
的实例。例如,给定输入- - text - -
,输出将为- text -
。
请注意\s
匹配Unicode空格(在Python 3中)。您需要re.ASCII
标志才能将其恢复为仅匹配[ \t\n\r\f\v]
。
由于您对 -text
,-text-
,-text -
等案例不是很清楚,因此上述正则表达式只会为这3个案例输出text
。
对于 text
之类的字符串,正则表达式只会删除空格。