python正则表达式不规则数据

时间:2015-05-19 02:01:16

标签: python regex

我一直在尝试为我的问题构建一个正则表达式,如下所示:

我想在节点"上删除"的内容如果后面的单词在句子末尾

,那么直到我到达结尾为止

e.g。

  

PAA-NID30054-30102V2001P7 PAA_PL_ALERT在节点上被清除   站点六百七十三万六千三百五十六分之五十三万二千三百三十二。

  

PAC-NID43453-435346547 PAA_PL_ALERT在节点siteground上清除。

我使用了以下正则表达式:

on node.*

但是,有些条目在节点上有#34;"在句子的中间,我不想删除句子的其余部分(我想保存连接不可用的内容)

e.g。

  

节点上的VNOC-IPX DRA报警re-dsad-a - DEASWQ01_01 - 连接   不可用。

使用思想:

on node.*-

然而,在节点"之后它不会清除"之后的字。对于第一个例子。

您是否建议使用开始和结束函数来确定匹配是否在字符串的末尾?即创建一个if子句并检查匹配是否在最终用途。否则使用 -

3 个答案:

答案 0 :(得分:0)

您可以在正则表达式中使用行尾标记。也许试试这个:

on node [^\s]*$
         |   ||__ End of line
         |   |___ Any amount
         |_______ Not a space character (space, tab, newline)

答案 1 :(得分:0)

  

我想在节点"上删除"的内容如果后面的单词在句子末尾

,那么直到我到达结尾为止

听起来你想删除"on node"以及之后的下一部作品。

尝试以下方法:

r'on node \S+'

当然,它会出现问题

VNOC-IPX DRA Alarm on node re-dsad-a - DEASWQ01_01 - Connection Unavailable.

因为这是节点"之后的多个单词"。在这种情况下,您的规则过于随意,您想要删除并希望保留。

答案 2 :(得分:0)

如果您对其他方式持开放态度(不使用正则表达式),那么可能的天真解决方案可以使用str.split()

一般来说,它看起来像这样;

parts = line.split("on node")  # you now have some parts to look at
# if 'on node' was found this will be > 1
if len(parts) > 1:
  # additional logic to assess the second part of the string
  if parts[1].lower().find("connection unavailable") >= 0:
    # do something
  # do something more