【问题标题】:find line containing exact number string not started with . or ending with any other digit [duplicate]查找包含不以 . 开头的确切数字字符串的行。或以任何其他数字结尾[重复]
【发布时间】:2020-10-14 05:53:42
【问题描述】:


表达式用于查找字符串中不以点开头且不以任何其他数字结尾的确切数字。(说明)

ticket=1740
text="SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start"
text2="SNMPD_TRAP_WARM_START:SNMP trap:(4.1740;543;544) warm start"
text3="SNMPD_TRAP_WARM_START:SNMP trap:( 1740 543;544) warm start"

**if re.findall(r'\b'+str(1740)+'(?!\.?\d)', text):
    print(text)
answer should be only text3**

【问题讨论】:

    标签: python regex string python-2.7


    【解决方案1】:

    这将匹配字符串的开头或字符串的结尾与数字。第一组(^|\s) 查找行首或空格字符(相当于[\t\n\r\f])。

    同样,最后一组 ($|\s) 查找行尾或空格字符。

    如果您需要它严格匹配空格字符,则将\s 替换为空格字符 。

    ticket=1740
    text=[]
    text.append("SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start")
    text.append("SNMPD_TRAP_WARM_START:SNMP trap:(4.1740;543;544) warm start")
    text.append("SNMPD_TRAP_WARM_START:SNMP trap:( 1740 543;544) warm start")
    text.append("1740 SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start")
    text.append("SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start 1740")
    
    def find_text(search,input):
        import re
        REGEX=r'(^|\s)'+str(search)+'($|\s)'
    
        matchObj=re.search(REGEX,input)
        if matchObj:
            print(input)
        else:
            print("No match")
    
    for line in text:
        find_text(ticket, line)
    

    结果:

    No match
    No match
    SNMPD_TRAP_WARM_START:SNMP trap:( 1740 543;544) warm start
    1740 SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start
    SNMPD_TRAP_COLD_START:SNMP trap:(17405.737)cold start 1740
    

    【讨论】:

      【解决方案2】:

      这是对您问题的一种可能解释:

      text3 = "SNMPD_TRAP_WARM_START:SNMP trap:( 1740 543;544) warm start"
      if re.search(r'^.*(?<![.\d])1740(?![.\d]).*$', text3):
          print("MATCH")
      

      【讨论】:

      • 找到确切号码后我必须打印行。不只是找到字符串并打印匹配。逐一详细说明并打印与数字完全匹配的行
      • @ZamanAzam 然后稍微调整模式以在输入文本中也搜索1740。
      • 蒂姆,你确定你已经正确解释了这个问题吗?我读它需要(?&lt;=\.)1740(?!\d)。 Zamon,您是否希望匹配 1 前面没有句点且 0 后面没有数字的每个字符串 1740?
      • @CarySwoveland 阅读问题answer should be only text3** ...我认为只有 text3 是预期的,因为它确实包含1740但也没有不 i> 包含任何十进制数字。
      • 蒂姆,我将第一句话读为,“...表达式以查找前面没有句点或后面没有数字的字符串 "1740"”(尽管我怀疑 OP 想要它前面有一个数字),部分原因是 OP 在他/她的正则表达式中有ticket=1740 和文字1740。换句话说,我认为 OP 正在验证包含"1740" 的字符串是否具有正确格式的"1740"(而不关心字符串的其余部分),并且发现只有"text3" 有。不过,这只是猜测。希望OP会澄清。
      猜你喜欢
      • 1970-01-01
      • 2021-02-08
      • 2023-01-10
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多