这可能是一个重复的问题,在寻找了一点,我找不到答案,因此我张贴的问题。 如何仅基于字符串中的子字符串来查找整个字符串?你知道吗
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=']
*
量词总是应用于它放在后面的事物;<regex thing>*
意味着<regex thing>
应该匹配零次或多次。你知道吗对于您的尝试,
<regex thing>
是=
字符,因此=*
表示:零个或多个等于字符。实际上,'CThru='
包含一个这样的相等字符,而不是更多。*
不会匹配其他任何东西!这与glob syntax不同,后者通常在列出文件时使用,其中*
字符本身用于匹配零个或多个文件名字符。正则表达式不是全局模式。你知道吗如果您想得到
=
字符后面的值,您需要放入一个模式(regex的东西)来匹配值文本中的字符。由于值始终是而不是空格(空格分隔键=值对)的字符,因此可以使用[^ ]
集来表示不是空格,并向其添加+
,以确保至少有一个字符。[^...]
是一个负集,一个regex“thing”,它将匹配文本中不的任何字符,因此[^ ]
匹配任何不是空格的字符。+
量词表示一个或多个字符,因此我们需要一个或多个不是空格的字符。*
和+
是贪婪的,这意味着正则表达式匹配器将使用尽可能多的字符来满足该模式。你知道吗如果将
(...)
圆括号括在该部分周围,则告诉regex引擎捕获该部分并将其放入一个组中,如果只有该组,re.findall()
将返回组1中的所有内容。因此只返回CThru=
之后的值:这将返回任何不属于空格的文本,作为列表:
如果只有一个这样的键值对,那么您可以使用
re.search()
,如果得到的结果不是None
,则请求第1组:最后的星号使字符串
CThru=
变得贪婪(0个或更多匹配项),但它不会搜索其后的任何内容。你知道吗只要
re.findall("CThru=\d*\.\d*", test)
后面总是跟着一个浮点数,然后是一个空格,那么沿着re.findall("CThru=\d*\.\d*", test)
这条线的一些东西就应该起作用。你知道吗效果很好。你知道吗
你需要一些东西在*之前。你知道吗
例如,将从CThru捕获到字符串的末尾。你知道吗
相关问题 更多 >
编程相关推荐