次のような文字列からコンテンツを抽出しようとしています。
A.content content
content
B.content C. content content
content D.content
そして、これがPythonでの私の正規表現パターンです:
reg = re.compile(r'''
(?xi)
(\w\.\t*\s*)+ (?# e.g. A. or b.)
(.+) (?# the alphanumeric content with common symbols)
^(?:\1) (?# e.g. 'not A.' or 'not b.')
''')
m = reg.findall(s)
例を挙げましょう。次の文字列があるとします。
s = '''
a. $1000 abcde!?
b. (December 31, 1993.)
c. 8/1/2013
d. $690 * 10% = 69 Blah blah
'''
次の正規表現は機能し、正規表現グループの内容を返します。
reg = re.compile(r'''
(?xi)
\w\.\t*
([^\n]+) (?# anything not newline char)
''')
for c in reg.findall(s): print "line:", c
>>>line: $1000 abcde!?
>>>line: (December 31, 1993.)
>>>line: 8/1/2013
>>>line: $690 * 10% = 69 Blah blah
しかし、内容が別の行ににじみ出た場合、正規表現は機能しません。
s = '''
a. $1000 abcde!? B. December
31, 1993 c. 8/1/2013 D. $690 * 10% =
69 Blah blah
'''
reg = re.compile(r'''
(?xi)
(\w\.\t*\s*)+ (?# e.g. A. or b.)
(.+) (?# the alphanumeric content with common symbols)
^(?:\1) (?# e.g. 'not A.' or 'not b.')
''')
for c in reg.findall(s): print "line:", c # no matches :(
>>> blank :(
コンテンツを区切る改行があるかどうかに関係なく、同じ一致を取得したいと思います。
というわけで、否定一致語群を使ってみました。では、正規表現またはその他の回避策を使用してこの問題を解決する方法についてのアイデアはありますか?
ありがとう。
ポール