仅根据字符串中的子字符串查找整个字符串

时间:2018-09-12 14:28:27

标签: python regex python-3.6

这可能是一个重复性的问题,经过一番搜索后,我找不到答案,因此我发布了该问题。 如何仅基于字符串中的子字符串找到整个字符串?

<?php
$employee = get_field('employee');
if( $employee ) {
    $post = $employee;
    setup_postdata( $post ); 

    // At this point you can pull any data from the employee post that you need.

    wp_reset_postdata(); // Make sure to reset postdata when you're done.
}
?>

要获取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)

3 个答案:

答案 0 :(得分:2)

* 量化符始终应用于放置在其后的对象; <regex thing>*表示<regex thing>应该匹配零次或多次。

对于您的尝试,<regex thing>=字符,因此=*的意思是:零个或多个等于字符。实际上,'CThru='包含一个相同的字符,仅此而已。 *与其他任何内容都不匹配!这与glob syntax不同,Cropping2D通常在列出文件时使用,其中{em> just *字符本身用于匹配零个或多个文件名字符。正则表达式不是全局模式。

如果要在=字符后获取值 ,则需要放入一个模式(正则表达式)以匹配值文本中的字符。由于值始终是不是空格的字符(空格分隔键=值对),因此可以使用[^ ]设置为说不是空格和为此添加+,以确保至少有一个字符。 [^...]是一个负数集,它是一个正则表达式'thing',它将匹配集合中 not 中文本的任何字符,因此{{1} }匹配不是空格的任何字符。 [^ ]量词表示一个个或多个字符,因此我们需要1个或多个非空格字符。 +* greedy ,这意味着正则表达式匹配器将使用尽可能多的字符来满足该模式。

如果您在该部分周围加上+括号,则告诉正则表达式引擎捕获该部分并将其放入组中,如果只有该组,(...)将返回组1中的所有内容。因此,返回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'] ,并询问第1组,是否得出的结果不是re.search()

None

答案 1 :(得分:0)

最后的星号使字符串CThru=处于贪婪状态(匹配0个或更多),但之后不搜索任何内容。

只要re.findall("CThru=\d*\.\d*", test)后面总是跟随一个浮点数然后是一个空格,那么应该遵循CThru=的用法。

答案 2 :(得分:0)

re.findall("CThru=[^\s]*", test)

效果很好。

您需要在*之前添加一些内容。

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

将从CThru捕获到字符串的结尾。