Python3 正则匹配行开头不为#的方法

python">import re

cnt = '''#201906

6.3 08:30 19:30

6.4 08:24 19:09

6.5 08:31 18:49

6.6 08:30 19:11

6.7

6.8

6.10 #请假

6.11 08:32 19:04

6.12 08:31 19:01

6.13 08:29 20:29

6.14 08:28 19:32

6.15 13:29 18:47

6.17 08:34 19:05

6.18 08:27 20:48

6.19 08:31 19:29

6.21 08:27 19:40

6.22 08:32 18:55

6.24 08:21 18:27

6.25 08:27 18:38

6.26 08:37 18:57

6.27 13:27 20:03

6.28 08:24 19:05'''

1.Python正则中匹配行开头不为#的写法
2.如何使用Python将上面的有效的工作日记录匹配出来。

pattern = '\s*(\d+[\D]{1}\d+)\s+((\d+[\D]{1}\d+)([\D]{1}\d+)?)\s+((\d+[\D]{1}\d+)([\D]{1}\d+)?)(\s+\#[^\r\n]+)?\s*(?=[\r\n]+)'

for m in re.findall(pattern, cnt, flags=re.M | re.S | re.X):

print(m)

(以上代码无法匹配到最末尾的 6.12)


回答:

  • 如果要匹配不是#开头的

    (?<=[\r\n])[^#].*

    Python3 正则匹配行开头不为#的方法

  • 如果匹配不包含#

    (?<=[\r\n])(?!.*#).*

    Python3 正则匹配行开头不为#的方法

    (?<=[\r\n]) 零宽正后发断言,匹配以rn开头的


回答:

# -*- coding: UTF-8 -*-

import re

cnt = '''#201906

6.3 08:30 19:30

6.4 08:24 19:09

6.5 08:31 18:49

6.6 08:30 19:11

6.7

6.8

6.10 #请假

6.11 08:32 19:04

6.12 08:31 19:01

6.13 08:29 20:29

6.14 08:28 19:32

6.15 13:29 18:47

6.17 08:34 19:05

6.18 08:27 20:48

6.19 08:31 19:29

6.21 08:27 19:40

6.22 08:32 18:55

6.24 08:21 18:27

6.25 08:27 18:38

6.26 08:37 18:57

6.27 13:27 20:03

6.28 08:24 19:05'''

result=re.findall(r'^(?!\s*#).+$',cnt,re.M)

print(result)


回答:

没必要用正则表达式,如

items = list(map(str.split, filter(lambda i: i and i[0]!='#', map(str.strip, cnt.split('\n')))))

结果

[['6.3', '08:30', '19:30'],

['6.4', '08:24', '19:09'],

['6.5', '08:31', '18:49'],

['6.6', '08:30', '19:11'],

['6.7'],

['6.8'],

['6.10', '#请假'],

['6.11', '08:32', '19:04'],

['6.12', '08:31', '19:01'],

['6.13', '08:29', '20:29'],

['6.14', '08:28', '19:32'],

['6.15', '13:29', '18:47'],

['6.17', '08:34', '19:05'],

['6.18', '08:27', '20:48'],

['6.19', '08:31', '19:29'],

['6.21', '08:27', '19:40'],

['6.22', '08:32', '18:55'],

['6.24', '08:21', '18:27'],

['6.25', '08:27', '18:38'],

['6.26', '08:37', '18:57'],

['6.27', '13:27', '20:03'],

['6.28', '08:24', '19:05']]

若数据庞大,先清洗、规则化,再用 pandas.DataFrame 处理。


回答:

不需要正则的,你的需求startswith就可以了。

records = [i.split() for i in cnt.split('\n') if i and not i.startswith('#')]

结果参考:

[['6.3', '08:30', '19:30'], ... , ['6.8'], ['6.10', '#请假'], ...]

以上是 Python3 正则匹配行开头不为#的方法 的全部内容, 来源链接: utcz.com/p/937739.html

回到顶部