Python:删除包括某个字符在内及其后面的所有内容

3

我有一些文本,如下所示:

1.6 # blah blah blah
# fjsadfklj slkjf yes 3.4
1.8*
1.9 1.10 #blah
#blah
1.11

我想通过删除同一行中所有的#字符及其后面的内容来清理它。换句话说,我希望:

1.6
1.8*
1.9 1.10
1.11

什么是最好的方法来解决这个问题?通过像partition这样简单的方法,还是使用正则表达式?


可能是 https://dev59.com/l3I-5IYBdhLWcg3wu7BU 的重复问题。请注意,最佳答案不一定是得分最高的,可能需要查看 https://dev59.com/l3I-5IYBdhLWcg3wu7BU#27178714 获取最稳健的答案。 - Cireo
2个回答

3

你可以尝试这个方法:

re.sub(r'\s*#.*', '', s)

\s* 可以匹配前面的垂直或水平空格字符。我所说的垂直空格是指换行符,回车符。

演示


2
也许这个可以满足您的请求,实现您所期望的功能?
example = '''1.6 # blah blah blah
# fjsadfklj slkjf yes 3.4
1.8*
1.9 1.10 #blah
#blah
1.11'''

for line in example.splitlines():
    print(line.split('#', 1)[0])

如果您真的想获得评论文本,代码很容易被修改以允许其捕获。


这是优越的方法,因为它简单明确。 - Josh J
一个天真的 timeit 显示 split 也快了约4倍。python -m timeit 'strs = ("x"*(100 - i%101) + "#" + "y"*100 for i in xrange(10000)); import re' 'for s in strs: re.sub(r"\s*#.*", "", s)'s.split("#", 1)[0]。在我的机器上,31.5毫秒对7.02毫秒。 - Cireo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接