0

発音のある単語があります。とにかく、最初の単語だけを抽出することに興味があります

A  AH0
A'S  EY1 Z
A(2)  EY1
A.  EY1
A.'S  EY1 Z
A.S  EY1 Z
A42128  EY1 F AO1 R T UW1 W AH1 N T UW1 EY1 T
AAA  T R IH2 P AH0 L EY1
AABERG  AA1 B ER0 G
AACHEN  AA1 K AH0 N
AAKER  AA1 K ER0
AALSETH  AA1 L S EH0 TH
AAMODT  AA1 M AH0 T
AANCOR  AA1 N K AO2 R
AARDEMA  AA0 R D EH1 M AH0

私は試したregex= r"(\A[A-Z]+\b) | (\A[A-Z\'w]+\b)"

\A : 文字列の先頭のみに一致します。

I still dont get the regex.
I have few conditions:
1. No starting whitespace - can be \s
2. (\A[A-Z\'w]+\b) in this: 

\b : 再びhttp://docs.python.org/2/library/re.htmlから。これは、英数字と非英数字の境界のように機能していると思いました。

What is happening is these are being collected:
('A', ' ')
('A', ' ', 'B', 'E', 'G', 'R') is actually AABERG
('A', ' ', 'C', 'E', 'H', 'N') AACHEN
('A', ' ', 'C', 'O', 'N', 'R')
('A', ' ', 'D', 'M', 'O', 'T')
('A', ' ', 'E', 'D', 'M', 'R')
('A', ' ', 'E', 'H', 'L', 'S', 'T')  
('A', ' ', 'K', 'R', 'E') AAKER

私はそれらをタプルのリスト (タプル内の個々の文字としての 1 つの単語) として収集しています。問題は、繰り返し文字 A がここで複数回繰り返されると、「A」が含まれず、代わりに ' ' 空の空白が追加されることがわかります。何が起こっている?ここで最初の開始単語のみを抽出したいので、not A(2) or whitespaces or (,),[,] or any other symbolic character except for "'\'"[AZ\'w] を追加することを考えました

また、誰かが複数の条件を追加する方法を教えてくれるなら、言ってみましょう

regex= r"(\A[A-Z]+\b) | (\A[A-Z\'w]+\b) | ^\A[A-Z]+\b"これは抽出で ^\A[AZ]+\b" または ^\A[AZ]+\s" の方が優れていますか? 私は混乱しています。

アップデート

私も何かが欲しいなら

;Semi-colon
A.S
.Dot

動作r'[^\SA-Z\\]+しますか?これ'\\'は、以下の Inbar Rose のソリューションから取得したものです。それが何をするのかまだ解明中

4

3 に答える 3

2

私はあなたが期待する出力について 100% ではありませんが、ここにそのショットを示します。

#!/usr/bin/env python
import re

pattern = r"^([A-Za-z]+)"

text = """A  AH0
A'S  EY1 Z
A(2)  EY1
A.  EY1
A.'S  EY1 Z
A.S  EY1 Z
A42128  EY1 F AO1 R T UW1 W AH1 N T UW1 EY1 T
AAA  T R IH2 P AH0 L EY1
AABERG  AA1 B ER0 G
AACHEN  AA1 K AH0 N
AAKER  AA1 K ER0
AALSETH  AA1 L S EH0 TH
AAMODT  AA1 M AH0 T
AANCOR  AA1 N K AO2 R
AARDEMA  AA0 R D EH1 M AH0"""

def main():
    print re.findall(pattern, text, re.MULTILINE)

if __name__ == '__main__':
    main()

これからの出力は次のとおりです。

['A', 'A', 'A', 'A', 'A', 'A', 'A', 'AAA', 'AABERG', 'AACHEN', 'AAKER', 'AALSETH', 'AAMODT', 'AANCOR', 'AARDEMA']

問題がより複雑になった場合は、この回答にいくつかの小さな変更を加えることができます. だけではなく、別の行区切り文字が必要だったとしましょう\n。次のパターンは使用されませんMULTILINEが、以前と同じ出力が生成されます。最初のセットでは、. など、照合で​​きる追加の文字を追加できます;

pattern = r"[\n^]([A-Za-z]+)"
print re.findall(pattern, text)
于 2013-05-20T15:52:53.843 に答える