Python正则表达式字母数字字符串,数字部分介于两个值之间

时间:2016-10-13 11:25:11

标签: python regex

我对正则表达式一般都很糟糕,但是我有兴趣知道是否有一种方法可以检查字母数字字符串的数字部分是在两个值之间,还是更少/大于某个值? / p>

例如,如果我在一个文件中搜索一个字符串,该文件有多个数字变体,如下所示:

key_string (870 bytes)
key_string (1500 bytes)
key_string (70 bytes)

是否可以提取' key_string'字符串仅取决于'(xxxx字节)' part是在某个阈值之间,还是小于/大于某个值?

例如,如果我想找到以上所有' key_string'例如,第二部分低于1200字节,我可以打印出来:

key_string (870 bytes)
key_string (70 bytes)

并在一个正则表达式中忽略下面的字符串? :

key_string (1500 bytes)

1 个答案:

答案 0 :(得分:1)

您可以使用re.findall()与正则表达式一起搜索。

正则表达式的解释如下:

key_string\s+\((\d+)\s+bytes\)

Regular expression visualization

Debuggex Demo

<强>代码:

import re

with open('result.txt') as fh:
    for l in fh:
        a = re.findall(r"key_string\s+\((\d+)\s+bytes\)",l.strip())
        if len(a) > 0 and int(a[0]) < 1200:
            print (l)

<强>输出:

C:\Users\dinesh_pundkar\Desktop>python c.py
key_string (870 bytes)

key_string (70 bytes)

C:\Users\dinesh_pundkar\Desktop>

@WiktorStribiżew建议的代码2:

import re

pattern = r'key_string\s+\((\d+)\s+bytes\)'
regex = re.compile(pattern, re.IGNORECASE)
with open('result.txt') as fh:
    for match in regex.finditer(fh.read()):
        if int(match.group(1)) < 1200:
            print((match.group()))