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

2024-05-23 20:31:41 发布

您现在位置: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.

我的密码怎么了?似乎表达是错误的。如果字符/符号位于行的开头或结尾(出现一个或多个),如何删除该字符/符号?


Tags: orofthe字符串recleanmore结尾
3条回答

在regex中有多余的空间。即使一个空格也算作一个字符。

r'^(?:\*|==)|==$'

首先你应该注意“{”之前的空格。。。这些是有意义的,因此示例中的量词应用于空间。

若要仅在开头或结尾删除“=”(两个或更多),还需要另一个regexp。。。例如

clean = re.sub(r'^(==+)?(.*?)(==+)?$', r'\2', s)

如果不输入“^”或“$”,则表达式可以匹配任何位置(即即使在字符串中间)。

如果只想从开头和结尾删除字符,可以使用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)

但是,IMHO使用strip/lstrip/rstrip最适合您想做的事情。

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

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

(一个常见的错误是认为这些方法按照参数中给定的顺序删除字符,事实上,参数只是要删除的字符序列,不管它们的顺序是什么,这就是为什么.strip('= ')将从开始和结束处删除每个“=”和“”,而不仅仅是字符串“=”。)

相关问题 更多 >