python正则表达式

先写正则表达式 re_log_data,然后 re.compile(re_log_data) 预处理

1
2
3
4
5
6
7
8
9
10
11
import re

re_log_data = r"^\s*((-?[0-9]*(\.[0-9]*)?([eE][-]?)?[0-9]+)\s+)+(-?[0-9]*(\.[0-9]*)?([eE][-]?)?[0-9]+)?"
pattern = re.compile(re_log_data)

# test_string = '4 binsize = 6.7, bins = 8 8 150'
test_string = '''
0 98.676962 -442025.34 0 -441271.54 18272.015 2306304
2000 96.406522 -442997.22 0 -442260.76 -13680.737 2306304
4000 106.9393 -443334.55 0 -442517.63 -6014.7622 2316968.2
'''

接下来,开始用一些方法搜索

findall

这个用法比较简单,大多时候这个就够了

1
result = pattern.findall(test_string)

一般自己打印出来看看,是元组、数组,还是其他,直接索引就可以了

match

只返回第一个

1
result = pattern.match(test_string)

其中

  • groups() 会出现一些无用的

    1
    2
    3
    4
    5
    6
    7
    8
    result.groups()
    # ('2316968.2 \n', '2316968.2', '.', None, None, None, None)

    # 括号里变成数字 只是把 None 变成 这个数字
    result.groups(0)
    # ('2316968.2 \n', '2316968.2', '.', 0, 0, 0, 0)
    result.groups(1)
    # ('2316968.2 \n', '2316968.2', '.', 1, 1, 1, 1)
  • group()

    比较合适

    1
    2
    3
    4
    5
    print(result.group())
    # 0 98.676962 -442025.34 0 -441271.54 18272.015 2306304
    # 2000 96.406522 -442997.22 0 -442260.76 -13680.737 2306304
    # 4000 106.9393 -443334.55 0 -442517.63 -6014.7622 2316968.2

finditer

返回多个,每一个类似 match

test_string 换成如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

re_log_data = r"^\s*((-?[0-9]*(\.[0-9]*)?([eE][-]?)?[0-9]+)\s+)+(-?[0-9]*(\.[0-9]*)?([eE][-]?)?[0-9]+)?"
pattern = re.compile(re_log_data)

test_string = '''
4 binsize = 6.7, bins = 8 8 150
dadafaf
0 98.676962 -442025.34 0 -441271.54 18272.015 2306304
2000 96.406522 -442997.22 0 -442260.76 -13680.737 2306304
4000 106.9393 -443334.55 0 -442517.63 -6014.7622 2316968.2
ajdsiod
adsncios
'''


result = pattern.finditer(test_string)

if result:
print("查找成功.", result)
for s in result:
print(s)
print(s.group())
else:
print("查找不成功.")

match 找不到后面的

当时没写完,我忘了这里准备写什么了……,或许是

可以试一下把下面的打印看看

1
match.group()

本文作者:yuhldr
本文地址https://yuhldr.github.io/posts/6bab798e.html
版权声明:转载请注明出处!