【问题标题】:python remove part of linespython删除部分行
【发布时间】:2017-06-12 07:16:56
【问题描述】:

我有一个包含一些字符串的文本文件,例如:

test2@gmail.com:123456
test2@hotmail.com:124554134
test1@yahoo.com:fdsfsdfe
test5@gmail.com:9875464

现在我想通过 python 删除 .com 之前的所有字符串。

我的代码(但错误):

import re

myline = open("file.txt" ,"r").readlines()

for single_line in myline:
    spline= single_line.rstrip()
    result = re.sub("\.com$", "", spline)
    print (result)

我该怎么办? 谢谢

【问题讨论】:

  • 你想得到123456124554134fdsfsdfe9875464吗?标准是.com第一次出现后得到所有吗?或者也许与: 分开就足够了。请澄清。
  • myline 已包含此文件的内容。无需迭代。正则表达式可以捕获所有匹配项。使用re.findallre.finditer,您将获得所有匹配项的数组。
  • ...但是将 .readlines 更改为 read()

标签: python regex split


【解决方案1】:

你为什么使用re?只需拆分字符串。

with open("file.txt" ,"r") as f:
    for single_line in f:
        print single_line.split(':')[1]

【讨论】:

  • re的使用可以解释如果fdsfsdfe可以包含:
  • 不过,我还是会使用maxsplit 参数。 re 这里显然不需要。
  • 在我注意到 OP 发布了自己的答案之前,我看到了你的答案。我在下面发布了my solution with rsplit
【解决方案2】:

根据your own answer 使用.*\.com 正则表达式判断,您想要删除直到最后一次出现com: 的所有行内容。您可以使用str.rsplit

返回字符串中的单词列表,由分隔符字符串分隔(从右开始)。

Python demo

ss = ['test2@gmail.com:123456',
'test2@hotmail.com:124554134',
'test1@yahoo.com:fdsfsdfe',
'test5@gmail.com:9875464',
'no com']
res = [s.rsplit("com:")[1]  if "com:" in s else s for s in ss]
print(res)
# => ['123456', '124554134', 'fdsfsdfe', '9875464', 'no com']

所以,要么你得到最后一个com: 之后的部分,要么得到整个字符串。

【讨论】:

    【解决方案3】:

    我找到了答案。 我用这个:

    import re
    
    myline = open("file.txt" ,"r").readlines()
    
    for single_line in myline:
        spline= single_line.rstrip()
        result = re.sub(".*.com:", "", spline)
        print (result)
    

    【讨论】:

    • 这意味着您要删除直到最后一次出现 com: 的所有行内容。为什么不将细节添加到问题中,您会得到答案,而且可能不仅仅是一个解决方案,而且还解释了它为什么起作用?
    • 请参阅下面的答案,该答案显示了如何在不使用正则表达式的情况下使用 str.rsplit 实现相同的目标。
    【解决方案4】:

    如果您只想选择:124554134:fdsfsdfe

    您可以使用示例中显示的:https://regex101.com/r/i2iA7T/1/

    :[\d\w]+
    

    或者,如果您想要没有: 的行,只需使用反向查找:

    (?<=:)[\d\w]+

    https://regex101.com/r/i2iA7T/2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多