1
import re
import urllib.request
file_txt = urllib.request.urlopen("ftp://ftp.sec.gov/edgar/data/1408597/0000930413-12-003922.txt")
pattern_item4= re.compile("(Item\\n*\s*4.*)Item\\n*\s*5")
print(re.search(pattern_item4,bytes.decode(f)))
#Returns None

この正規表現は、ルビュラーで必要なものを返しますが、明らかに Python で期待されることを行いません。誰かが私を助けてくれますか?正規表現の意図は、基本的に item4 と item5 の間のものを抽出することです。

ありがとうございました

ここに画像の説明を入力

4

3 に答える 3

1

生の文字列を使用してみてください

re.compile (r"(Item\\n*\s*4.*)Item\\n*\s*5")

のエスケープに関係していると思います\n。しかし、それが何と一致することを期待しているかを正確に知らなければ、それを伝えることは不可能です。

于 2012-07-11T23:27:12.667 に答える
1

re.DOTALL フラグが必要です。それ以外の場合.は、改行と一致しません。EOL で一致させるには、re.MULTILINE フラグItemを使用できます。$

pattern = re.compile(r"(Item$\s*4.*)Item$\s*5", re.S | re.M)
于 2012-07-12T00:06:40.743 に答える
0

改行がどこにあるかを知っていても、一致を見つけるのには役立ちません。したがって、\n具体的に一致させる必要はありません。それは単なる別の空白文字です。これを試して:

r"(?s)Item\s+4\..*?(?=Item\s+5\.)"

(?s).が改行に一致することを可能にするため.*?、先読み(?=Item\s*\d+\.)が次の「アイテム」エントリの先頭を検出するまですべてを消費します。すべてのアイテムを繰り返し処理したい場合は、4and5を に置き換えることができ\d+ます。

于 2012-07-12T00:48:37.590 に答える