从开头和结尾删除字符或仅删除行尾

Gus*_*sto 4 python regex

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

== (在一行的开头和结尾都出现),

* (仅在一行的开头).

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.
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?表达似乎是错误的.如果字符/符号位于行的开头或末尾(一次或多次出现),如何删除?

mde*_*ous 7

如果您只想从开头和结尾删除字符,则可以使用该string.strip()方法.这会给出一些像这样的代码:

>>> s1 = '== foo bar =='
>>> s1.strip('=')
' foo bar '
>>> s2 = '* foo bar'
>>> s2.lstrip('*')
' foo bar'
Run Code Online (Sandbox Code Playgroud)

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

如果你真的想使用正则表达式,它们看起来像这样:

clean = re.sub(r'(^={2,})|(={2,}$)', '', clean)
clean = re.sub(r'^\*+', '', clean)
Run Code Online (Sandbox Code Playgroud)

但恕我直言,使用strip/ lstrip/ rstrip将是最适合你想做的事情.

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

clean = clean.lstrip('*').strip('= ')
Run Code Online (Sandbox Code Playgroud)

(一个常见的错误是认为这些方法按照它们在参数中给出的顺序删除字符,事实上,参数只是要移除的一系列字符,无论它们的顺序如何,这就是为什么.strip('= ')会删除每个'= '和''从开头到结尾,而不只是字符串'='.)