【问题标题】:Parse messages from multiline string in python从python中的多行字符串解析消息
【发布时间】:2017-11-03 16:33:34
【问题描述】:

我有以下字符串

messages = """Jan 09, 07:03 AM - +91 12345 12345:‬ added ‪+91 45678 47263‬
Jan 10, 07:03 AM - +91 12345 12345: Hello
Jan 11, 07:03 AM - +91 12345 12345: How are you?.
Jan 12, 07:03 AM - +91 12345 12345: What's up?
"""

我想使用正则表达式解析上述消息并只打印消息

输出应该是

added ‪+91 45678 47263‬
Hello
How are you?.
What's up?

【问题讨论】:

  • re.split(':',message) 的消息是一行消息呢?
  • 但它也分时间
  • 然后拆分,从偏移量开始:re.split(':',message[15])。唯一的问题可能是消息是否包含“:”。因此,您需要获取split 给出的结果并将它们从索引 1 开始追加

标签: python regex python-2.7


【解决方案1】:

如果你想对其进行正则表达式:

for i in re.findall(".+:\s*(.*)", messages):
    print(i)

这并不能处理您在其中的特殊字符。

【讨论】:

    【解决方案2】:

    应该这样做:

    import re
    result = [re.split('\d+:', line)[-1] for line in messages.split('\n')]
    for item in result:
        print item
    

    【讨论】:

    • 是的,但是如果消息包含“:”那么?
    • 使用re 解决方案编辑。
    【解决方案3】:

    python 具有findindex 方法,它们将从左到右搜索字符串以查找子字符串并将其位置作为整数返回。它也有 rfindrindex 做同样的事情,但他们从右到左搜索。因此,您可以将文本拆分为换行符并对每一行进行切片。可能看起来像这样:

    messages = """Jan 09, 07:03 AM - +91 12345 12345:‬ added ‪+91 45678 47263‬
    Jan 10, 07:03 AM - +91 12345 12345: Hello
    Jan 11, 07:03 AM - +91 12345 12345: How are you?.
    Jan 12, 07:03 AM - +91 12345 12345: What's up?
    """
    
    for line in messages.split('\n'):
        if line:
            print(line[line.rindex(':') + 2:])
    

    产生输出:

    added ‪+91 45678 47263‬
    Hello
    How are you?.
    What's up?
    

    if line: 被扔在那里,因为最后的 """ 在一个新行上,它会作为一个空字符串出现,如果index/rindex 找不到子字符串,则会抛出一个错误在字符串中。如果这是一个问题,您可以使用 findrfind 方法返回 -1 而不是抛出错误。

    另外值得注意的是,如果消息本身包含:,则会出现意外结果。

    【讨论】:

      【解决方案4】:

      如果您有一个字符串并且想要获取第一个“:”之后的所有文本,请尝试以下操作:

      myString = "Jan 10, 07:03 AM - +91 12345 12345: Hello"
      index = myString.find(":") # Gets index of first ":" in the myString variable
      message = myString[index:] # Starts at index and gets everything afterwards
      # message is now ": Hello"
      

      如果你想从消息中删除冒号,只需在索引中添加 1

      message = myString[index+1:] # message is now " Hello"
      

      然后您可以使用 messages.split('\n') 对每一行执行此操作,如下所示

      for line in messages.split('\n'):
          index = line.find(':') # Gets index of first ":" in line
          message = line[index+1:]
          print message
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 2011-09-11
        • 2021-10-29
        • 2016-06-29
        相关资源
        最近更新 更多