正则表达式找出python中具有非ascii字符的字段

时间:2010-11-09 08:18:58

标签: python

我有一千条记录的数据,我逐行阅读。每行都有一些字段及其值,但字段名称包含非ascii字符,下面是此类记录的示例:

|              |   | X:720                      | N°227: Done

其中X和N°(非ascii字符)是字段名,720,227和“完成”是我必须提取的字段值。  这些字段是可选的,可能存在也可能不存在。 现在我必须检查这些字段是否存在于行中,如果存在,那么它的值是什么(例如X字段的值为720,N°的值为227,“Done”) 请告诉我如何在python中使用正则表达式,在python中有没有其他方法可以做到这一点?

1 个答案:

答案 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表示“原始”字符串,因此您不需要转义反斜杠