搜索文档并在Python

时间:2017-03-15 22:46:31

标签: python regex

我有这个旧文档,我正在帮助清理并转换为数据集。这是一项以访谈形式进行的研究,但不幸的是,进行这项研究的人包括与受访者的回答混在一起的速记。这个过程的第一步是让我将这些笔记与答案分开。然后我想创建一个.csv,其中一列包含响应,另一列包含注释。

以下是研究中当前数据的示例(来自我制作的一个小test.txt文件):

$ AKAR3NDA.S+ QRUSS/)+ A BLAJ3R
0
FIN ABIXU/BRIVNS+TELE
IB3G81S+R1.B+ QI KOPIRN /AKCENT CLN VERBS+TAM XX(010

我遇到的麻烦是使用Python的re模块来实际挑选出我正在搜索的任何正则表达式。现在我只是看看我是否可以打印单独的注释和响应来测试这个,所以我将.csv部分从我的代码中删除。这是我的代码:

1 import re
2 
3 notation = r"(^\+ | \+$ | ^- | -$ | \+ BUT\b | - BUT\b | ^\$ | \$$ | ^\+\$ | \+\$$ | ^-\$ | -\$ | DRWG | QB\b | QT\b | QBF | QTF | QFR | ^= | =$ | Q a Q | QP\b | QM/Y | QF/Y | ^\* | \*$ | QU\b | Q-U | QUU | QR\b | QRR | QH\b | QS\b | QW\b | Q-W | QAP | Q-AP | QN\b | QNN | QOF | QOOF | QK\b | Q-K | QLIT | QV\b | QEM | QVL | QDG | QAMER | QHUM | QELSW | QRTR | QSMT | QOTW | QNEX | QET\b | QPOL | QRUSS | QRUM | QHUNG | QGERM | QSYN | QGL\b | QGLY | QYID | QGLE | QENG | QI GL | QANG | QI\b | ^\) | \)$ | ^\)\+ | \)\+$ | ^\)- | \)-$ | ^\)= | \)=$ | EQ | \|\| | QCF | QZZ | QZT | \.\.\.{1} | QETC | QVB | QADJ | QINF | QNOUN | /[^/]+/ | \b/ | \bCM\b | \bCLN\b | \bSC\b | \bXX\b | QQ\b | ^0\b | ^O\b | QNT | Q-T | QLAT | QTA | QNP | QMEMX | \u2721 | QED\b | QEDS | \(/[0-9]* | \([0-9]* | \(\$[0-9]* | \(\( | QEDN | OVRPMP | MISPMP | MISTD)"
4 
5 notesSeparate = []
6 
7 with open("test.txt") as f:
8   data = f.readlines()
9 
10 for line in data:
11   newRow = []
12   notes = str(re.findall(notation, line))
13   response = str(re.sub(notation, "", line))
14   newRow.append(response)
15   newRow.append(notes)
16   notesSeparate.append(newRow)
17 
18 print notesSeparate

我也意识到正则表达式很丑陋而且很长,但我不确定如何格式化它所以请任何关于它的指针也欢迎。无论如何,当我运行该文件时得到的是以下输出。

[['$ AKAR3NDA.S+ QRUSS/)+ A BLAJ3R\n', '[]'], ['0\n', '[]'], ['FIN
ABIXU/BRIVNS+TELE\n', '[]'], ['IB3G81S+R1.B+KOPIRN /AKCENTVERBS+TAM
XX(010', "[' QI ', ' CLN ']"]]

我想得到的是:

[['AKAR3NDA.S+ A BLAJ3R\n', ('$', 'QRUSS/)+')], ['0\n', ('')], ['FIN
ABIXU/BRIVNS+TELE\n', ('')], ['IB3G81S+R1.B+KOPIRN /AKCENTVERBS+TAM',
(' QI ', ' CLN ', 'XX(010')]]

我知道这一切都是如此混乱,但这就是重点 - 我正在尝试采取一些超级混乱的东西并使其不那么重要。我不能告诉你我多么欣赏一些方向。

1 个答案:

答案 0 :(得分:0)

我不知道这是否是您正在寻找的东西,但这至少应该是 运行更快 - 如果你关心的话。
它可能不会让它变得更容易管理。

顺便说一句,我认为你的正则表达式是扩展(即忽略空格)。
另外,为什么这个特定的代码点\u2721 ✡ STAR OF DAVID

(?:(?:^(?:\$|\)[+=-]?|\*|\+\$?|-\$?|[O0]\b|=))|(?:(?:\$|\)[+=-]?|\*|\+\$?|-|=)$)|Q[BHKNPRSTUVW]\b|(?:(?:[+-]BUT|Q(?:E[DT]|GL|[IQ]))\b)|(?:\b(?:/|(?:C(?:LN|M)|SC|XX)\b))|\|{2}|\.{3}|/[^/]+/|\(/\d*|\(\d*|\(\$\d*|\(\(|-\$|\u2721|(?:DRWG|EQ|MIS(?:PMP|TD)|OVRPMP|Q(?:-(?:AP|[KTUW])|A(?:DJ|MER|NG|P)|BF|CF|DG|E(?:D[NS]|LSW|M|NG|TC)|F(?:/Y|R)|G(?:ERM|L[EY])|HU(?:M|NG)|I(?:GL|NF)|L(?:AT|IT)|M(?:/Y|EMX)|N(?:EX|OUN|[NPT])|O(?:F|OF|TW)|POL|R(?:R|TR|U(?:M|SS))|S(?:MT|YN)|T[AF]|UU|V[BL]|YID|Z[TZ]|aQ)))

格式化

 (?:
      (?:
           ^ 
           (?:
                \$
             |  \) [+=-]? 
             |  \*
             |  \+\$? 
             |  -\$? 
             |  [O0] \b
             |  = 
           )
      )
   |  (?:
           (?: \$ | \) [+=-]? | \* | \+\$? | - | = )
           $ 
      )
   |  Q [BHKNPRSTUVW] \b 
   |  (?:
           (?:
                [+-] BUT
             |  Q
                (?: E [DT] | GL | [IQ] )
           )
           \b 
      )
   |  (?:
           \b 
           (?:
                /
             |  (?:
                     C
                     (?: LN | M )
                  |  SC
                  |  XX
                )
                \b 
           )
      )
   |  \|{2}
   |  \.{3}
   |  / [^/]+ /
   |  \(/ \d* 
   |  \( \d* 
   |  \(\$ \d* 
   |  \(\(
   |  -\$
   |  \u2721 
   |  (?:
           DRWG
        |  EQ
        |  MIS
           (?: PMP | TD )
        |  OVRPMP
        |  Q
           (?:
                -
                (?: AP | [KTUW] )
             |  A
                (?: DJ | MER | NG | P )
             |  BF
             |  CF
             |  DG
             |  E
                (?: D [NS] | LSW | M | NG | TC )
             |  F
                (?: /Y | R )
             |  G
                (?: ERM | L [EY] )
             |  HU
                (?: M | NG )
             |  I
                (?: GL | NF )
             |  L
                (?: AT | IT )
             |  M
                (?: /Y | EMX )
             |  N
                (?: EX | OUN | [NPT] )
             |  O
                (?: F | OF | TW )
             |  POL
             |  R
                (?:
                     R
                  |  TR
                  |  U
                     (?: M | SS )
                )
             |  S
                (?: MT | YN )
             |  T [AF] 
             |  UU
             |  V [BL] 
             |  YID
             |  Z [TZ] 
             |  aQ
           )
      )
 )