【问题标题】:Python: removing everything including and after a certain character on a linePython:删除所有内容,包括一行中某个字符之后的所有内容
【发布时间】:2015-10-23 10:26:27
【问题描述】:

我有一些这样的文字:

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 之类的简单方法,或者可能是正则表达式?

【问题讨论】:

标签: python regex string parsing string-formatting


【解决方案1】:

你可以试试这个,

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

\s* 也有助于匹配前面的垂直或水平空格字符。我所说的垂直空间是换行符,回车符。

DEMO

【讨论】:

    【解决方案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])
    

    如果您真的想要评论文本,可以轻松修改代码以允许捕获它。

    【讨论】:

    • 这是一种优越的方法,因为它简单明了。
    • 一个天真的 timeit 表明拆分也快 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 毫秒 vs 7.02 毫秒在我的机器上
    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 2017-08-26
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多