在Python中从字符串开头或结尾删除一个字符

5

我有一个字符串,例如可以随意包含-,包括一些空格。 我想使用Python中的正则表达式仅在-位于所有非空白字符之前或之后时才删除-。同时还想删除开头或结尾的所有空格。 例如:

string = '  -  test '

它应该返回:
string = 'test'

或者:

string = '  -this - '

应该返回它需要的结果。
string = 'this'

或者:

string = '  -this-is-nice - '

它应该返回:

它应该返回

string = 'this-is-nice'

我不知道Python的语法,但是一个正则表达式可能是 ^\s*-?\s*(.*?)\s*-?\s*$ - abiessu
- test 或者 -test 怎么样? - nhahtdh
2个回答

12
你不需要使用正则表达式。 str.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'

这是一个非常好的方法,不过第二个答案一次性完成了所有任务,因此我点赞并接受了那个答案。再次感谢这个出色的解决方案。 - TJ1
1
第二个解决方案非常棒。解决了我的问题。谢谢你。我给你点赞。 - skyrocker

2
import re
out = re.sub(r'^\s*(-\s*)?|(\s*-)?\s*$', '', input)

这个函数会尝试将字符串开头和结尾处的 - 符号去掉,但最多只会去掉一个。例如,对于输入字符串为 -  - text  - -,输出结果将会是 - text  -

需要注意的是,在 Python 3 中,\s 匹配的是 Unicode 的空白字符。如果要匹配只有 [ \t\n\r\f\v] 的空白字符集合,你需要使用 re.ASCII 标志。

由于一些特殊情况(如   -text-text--text -),正则表达式的匹配结果可能只会输出 text

对于只包含空格的字符串,该正则表达式将只会去掉空格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接