我有一千条记录的数据,我逐行阅读。每行都有一些字段及其值,但字段名称包含非ascii字符,下面是此类记录的示例:
| | | X:720 | N°227: Done
其中X和N°(非ascii字符)是字段名,720,227和“完成”是我必须提取的字段值。 这些字段是可选的,可能存在也可能不存在。 现在我必须检查这些字段是否存在于行中,如果存在,那么它的值是什么(例如X字段的值为720,N°的值为227,“Done”) 请告诉我如何在python中使用正则表达式,在python中有没有其他方法可以做到这一点?
答案 0 :(得分:0)
有时候正则表达式对这种事情有好处,有时split()
和其他字符串方法会更容易。您可以选择:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import re
RE_TXT = re.compile(r'\|\s*X:(\S+)\s*\|\s*N\D*(\d+):\s*(.*)$')
txt = '| | | X:720 | N°227: Done'
rx = RE_TXT.search(txt)
if rx:
print(rx.group(1))
print(rx.group(2))
print(rx.group(3))
print('-' * 20)
# other way without regex, but with more complicated logic:
arr = [s.strip() for s in txt.split('|')]
if arr[3].startswith('X:'):
print(arr[3].split(':')[1])
N, state = arr[4].split(':')
N = N[3:]
state = state.strip()
print(N)
print(state)
至于regexp:
\s*
是零个或多个白色字符\S+
是一个或多个非白色字符\d
代表数字\D
用于非数字.
表示任何字符r
表示“原始”字符串,因此您不需要转义反斜杠