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

发布于 2021-01-29 14:57:03

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

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

* (仅在一行的开头)。

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.

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

关注者
0
被浏览
58
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果只想从开头和结尾删除字符,则可以使用该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('= ')会删除每个’=开头和结尾处的’和’‘,而不仅仅是字符串’=’。)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看