小编典典

从行首和结尾或仅行尾删除字符

python

我想使用正则表达式从字符串中删除一些符号,例如:

== (发生在行的开头和结尾),

* (仅在一行的开头)。

def some_func():
    clean = re.sub(r'= {2,}', '', clean) #Removes 2 or more occurrences of = at the beg and at the end of a line.
    clean = re.sub(r'^\* {1,}', '', clean) #Removes 1 or more occurrences of * at the beginning of a line.

我的代码有什么问题?看来表达是错误的。如果字符/符号出现在行的开头或结尾(出现一次或多次),如何删除?


阅读 177

收藏
2021-01-20

共1个答案

小编典典

如果只想从开头和结尾删除字符,则可以使用该string.strip()方法。这将给出如下代码:

>>> s1 = '== foo bar =='
>>> s1.strip('=')
' foo bar '
>>> s2 = '* foo bar'
>>> s2.lstrip('*')
' foo bar'

strip方法从字符串的开头和结尾ltrip删除参数中给定的字符,仅从开头rstrip删除它们,仅从结尾删除它们。

如果您真的想使用正则表达式,则它们将如下所示:

clean = re.sub(r'(^={2,})|(={2,}$)', '', clean)
clean = re.sub(r'^\*+', '', clean)

但是恕我直言,使用strip/ lstrip/rstrip将是最适合您要执行的操作。

编辑: 在尼克的建议下,这是一个解决方案,可以在一行中完成所有这些操作:

clean = clean.lstrip('*').strip('= ')

(一个普遍的错误是认为这些方法按照在参数中给定的顺序删除字符,实际上,参数只是要删除的一系列字符,无论它们的顺序如何,这就是为什么.strip('= ')会删除每个’=开头和结尾处的’和’‘,而不仅仅是字符串’=’。)

2021-01-20