1

次の形式のデータを含むファイルがあります。

   1 AA/BB                  0C89JG
   2 ABANO/ANA VICTORIA     F12LFJ
   3 ABBOUDLASTNAME/ABBOUDF DWPTHC
   4 ABDALLAH/SIJAM         H0ZDM9
   5 ABDEL MESSIH/DINA      T0SF8N
   6 ABHISHEK/PRAMANIK      7SLKXV
   7 ABHYANKAR/DHANANJAY    7SM0BV
   8 ABOUSALAMA/FEMKE       LTTRQC
   9 ABRAMOVA/NATALIA       77LCPZ
  10 ABRANTES/JOAO          KXZC7Q
  11 ABRATH/LUC             D5J99J
  12 ABREO/HECTOR           CXDH4G
  13 ABREU/ANDREA           242GRC
  14 ABREU/MARCELO          2436R7
  15 ABREU/VANDA            3HDNQQ
  16 ABTS/NATHALIE          DSK9TN
  17 ABTS/NATHALIE          FZ0LN4 

そして、17行目からFZ0LN4などの最後の6文字を抽出しようとしています。私が思いついた正規表現は次のとおりです。

([0-9]{1,5})([A-Z /]) ([0-9A-Z]{6})

しかし、現時点では機能していません。誰でも何が問題なのか指摘できますか?

4

5 に答える 5

2

いくつかの問題があります。

  • 一部の空白と一致していません。
  • には[A-Z /]繰り返し演算子がありません。

正規表現を次のように書き直します。

In [8]: re.match(r'\s*(\d+)\s*([A-Z /]+?)\s*(\w+)$', '  15 ABREU/VANDA            3HDNQQ').groups()
Out[8]: ('15', 'ABREU/VANDA', '3HDNQQ')

最後の 6 文字だけが必要な場合は、正規表現は必要ありません。

In [15]: s = '  15 ABREU/VANDA            3HDNQQ'

In [16]: s[-6:]
Out[16]: '3HDNQQ'
于 2013-04-11T16:26:32.183 に答える
2

行末の文字列だけが必要な場合は、次のようなより単純な正規表現を使用できます。\b\w{6}\b$

于 2013-04-11T16:30:54.957 に答える
1

最後の行 (17) だけを探していますか? その場合は、文字列全体を再検索します。

import re
myString="""
   1 AA/BB                  0C89JG
   2 ABANO/ANA VICTORIA     F12LFJ
   3 ABBOUDLASTNAME/ABBOUDF DWPTHC
   4 ABDALLAH/SIJAM         H0ZDM9
   5 ABDEL MESSIH/DINA      T0SF8N
   6 ABHISHEK/PRAMANIK      7SLKXV
   7 ABHYANKAR/DHANANJAY    7SM0BV
   8 ABOUSALAMA/FEMKE       LTTRQC
   9 ABRAMOVA/NATALIA       77LCPZ
  10 ABRANTES/JOAO          KXZC7Q
  11 ABRATH/LUC             D5J99J
  12 ABREO/HECTOR           CXDH4G
  13 ABREU/ANDREA           242GRC
  14 ABREU/MARCELO          2436R7
  15 ABREU/VANDA            3HDNQQ
  16 ABTS/NATHALIE          DSK9TN
  17 ABTS/NATHALIE          FZ0LN4
"""

m = re.search("(\S{6})$", myString)
if m:
    print m.group(1)

特定の行を見つける必要がある場合は、行を個別に反復処理する必要があります。

for line in myString.split("\n"):
    m = re.search("^\s*17\s*.*(\S{6})$", line)
    if m:
        print m.group(1)
于 2013-04-11T16:32:30.053 に答える
0

$行の and および\S非空白文字には文字を使用します

import re
>>> s = s = '''   1 AA/BB                  0C89JG
   2 ABANO/ANA VICTORIA     F12LFJ
   3 ABBOUDLASTNAME/ABBOUDF DWPTHC
   4 ABDALLAH/SIJAM         H0ZDM9
   5 ABDEL MESSIH/DINA      T0SF8N
   6 ABHISHEK/PRAMANIK      7SLKXV
   7 ABHYANKAR/DHANANJAY    7SM0BV
   8 ABOUSALAMA/FEMKE       LTTRQC
   9 ABRAMOVA/NATALIA       77LCPZ
  10 ABRANTES/JOAO          KXZC7Q
  11 ABRATH/LUC             D5J99J
  12 ABREO/HECTOR           CXDH4G
  13 ABREU/ANDREA           242GRC
  14 ABREU/MARCELO          2436R7
  15 ABREU/VANDA            3HDNQQ
  16 ABTS/NATHALIE          DSK9TN
  17 ABTS/NATHALIE          FZ0LN4'''

>>> re.findall('\\S{6}$', s, re.MULTILINE)
['0C89JG', 'F12LFJ', 'DWPTHC', 'H0ZDM9', 'T0SF8N', '7SLKXV', '7SM0BV', 'LTTRQC', '77LCPZ', 'KXZC7Q', 'D5J99J', 'CXDH4G', '242GRC', '2436R7', '3HDNQQ', 'DSK9TN', 'FZ0LN4']
于 2013-04-11T16:30:31.870 に答える