代码之家  ›  专栏  ›  技术社区  ›  tandem

仅基于字符串中的子字符串查找整个字符串

  •  0
  • tandem  · 技术社区  · 6 年前

    这可能是一个重复的问题,在寻找了一点,我找不到答案,因此我张贴的问题。 如何仅基于字符串中的子字符串来查找整个字符串?

    import re
    
    test = 'INFO: 106.00s - SearchDriver: GET CThru=27.027 OThru=25.566 CErr=0.000 CResp=0.013 OResp=0.011 CSD=0.015 OSD=0.010 C90%Resp=0.025 O90%Resp=0.025'
    

    CThru=27.027 ,我正试着这么做。

    re.findall("CThru=*", test)
    

    ['CThru=']
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Martijn Pieters    6 年前

    这个 * 量词 <regex thing>* 意思是 <regex thing> 应该匹配零次或多次。

    感谢你的努力, <regex thing> = 性格,所以 =* 'CThru=' 包含这样一个相等的字符,而不是更多。这个 * 其他的都配不上!这与 glob syntax 只是 这个 字符本身用于匹配 零个或多个文件名字符

    如果你想得到价值 下列的 这个 字符,你需要输入一个模式(regex的东西)来匹配 . 因为值始终是 空格(分隔键=值对的空格),可以使用 [^ ] 准备说 不是空间 并添加 + [^...] 是一个 ,一个正则表达式“thing”,它将匹配 [^ ] 匹配任何不是空格的字符。这个 量词手段 一个或多个字符,因此我们需要一个或多个不是空格的字符。 * 贪婪的 ,这意味着正则表达式匹配器将使用尽可能多的字符来满足该模式。

    如果你把 (...) re.findall() 如果只有那一组的话,我会把第一组的东西都还给你。所以呢 之后 CThru= 返回时间:

    re.findall("CThru=([^ ]+)", test)
    

    任何不是空格的文本

    >>> import re
    >>> test = 'INFO: 106.00s - SearchDriver: GET CThru=27.027 OThru=25.566 CErr=0.000 CResp=0.013 OResp=0.011 CSD=0.015 OSD=0.010 C90%Resp=0.025 O90%Resp=0.025'
    >>> re.findall("CThru=([^ ]+)", test)
    ['27.027']
    

    如果有一天 re.search() ,如果第1组给出的结果不是 None :

    match = re.search("CThru=([^ ]+)", test)
    if match:
        value = match.group(1)
    
        2
  •  0
  •   Corentin Limier    6 年前
    re.findall("CThru=[^\s]*", test)
    

    效果很好。

    你需要一些东西在*之前。

    re.findall("CThru=.*", test)
    

    例如,将从CThru捕获到字符串的末尾。

        3
  •  0
  •   Nordle    6 年前

    最后的星号组成了弦 CThru= 贪婪(0个或更多匹配项),但它不会在它之后搜索任何内容。

    re.findall("CThru=\d*\.\d*", test) 应该有用,只要 总是后跟一个浮点数和一个空格。