从行首和结尾或仅行尾删除字符
我想使用正则表达式从字符串中删除一些符号,例如:
==
(发生在行的开头和结尾),
*
(仅在一行的开头)。
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.
我的代码有什么问题?看来表达是错误的。如果字符/符号出现在行的开头或结尾(出现一次或多次),如何删除?
-
如果只想从开头和结尾删除字符,则可以使用该
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('= ')
会删除每个’=开头和结尾处的’和’‘,而不仅仅是字符串’=’。)