Python3 正则匹配行开头不为#的方法
python">import recnt = '''#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])[^#].*
如果匹配不包含
#
的(?<=[\r\n])(?!.*#).*
(?<=[\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