我想使用正则表达式从字符串中删除一些符号,例如:
== (发生在行的开头和结尾),
==
* (仅在一行的开头)。
*
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()方法。这将给出如下代码:
string.strip()
>>> s1 = '== foo bar ==' >>> s1.strip('=') ' foo bar ' >>> s2 = '* foo bar' >>> s2.lstrip('*') ' foo bar'
该strip方法从字符串的开头和结尾ltrip删除参数中给定的字符,仅从开头rstrip删除它们,仅从结尾删除它们。
strip
ltrip
rstrip
如果您真的想使用正则表达式,则它们将如下所示:
clean = re.sub(r'(^={2,})|(={2,}$)', '', clean) clean = re.sub(r'^\*+', '', clean)
但是恕我直言,使用strip/ lstrip/rstrip将是最适合您要执行的操作。
lstrip
编辑: 在尼克的建议下,这是一个解决方案,可以在一行中完成所有这些操作:
clean = clean.lstrip('*').strip('= ')
(一个普遍的错误是认为这些方法按照在参数中给定的顺序删除字符,实际上,参数只是要删除的一系列字符,无论它们的顺序如何,这就是为什么.strip('= ')会删除每个’=开头和结尾处的’和’‘,而不仅仅是字符串’=’。)
.strip('= ')