私は必要な正規表現に問題があります。おそらく、私は 'lookaround'または条件式の組み合わせを使用する必要があると確信していますが、私は損失。python regex help:スキップするための不明な情報
は私のようなデータ列を有する:
Iデータで必要とされていない「パターン番号」と「オプション#」基の各々に対するマッチング式(基である任意の基を有していてpattern1 pattern2 pattern3 unwanted-groups pattern4 random number of tokens pattern5 optional1 optional2 more unknown unwanted junk separated with white spaces optional3 optional4 etc
したがって、常に存在するとは限りません)、すべての 'トークン'以外のセクションが空白で区切られている場合は、パターン(テキストは自由形式)またはスキップするグループ数はありません。
私は、必要なグループ間で不要なものをスキップする方法を見つけ出すことができましたが、オプションのグループに当たったとき、私は失われてしまいました。どのようなヒント/助けを求めているべきですか?
おかげ
が、これは私が現在持っているものです。
pattern = re.compile(r'(?:(METAR|SPECI)\s*)*(?P<ICAO>[\w]{4}\s)*'
r'(?P<NIL>(NIL)\s)*(?P<UTC>[\d]{6}Z\s)*(?P<AUTOCOR>(AUTO|COR)*\s)*'
r'(?P<WINDS>[\w]{5,6}G*[\d]{0,2}(MPS|KT|KMH)\s)\s*'
r'.*?\s' #skip miscellaneous between winds and thermal data
r'(?P<THERM>[\d]{2}/[\d]{2}\s)\s*(?P<PRESS>A[\d]{4}\s)\s*'
r'(?:RMK\s)\s*(?P<AUTO>AO\d\s)*'
r'(?P<PEAK>(PK\sWND\s[\d]{5,6}/[\d]{2,4}))*'
r'(?P<SLP>SLP[\d]{3}\s)*'
r'(?P<PRECIP>P[\d]{4}\s)*'
r'(?P<remains>.*)'
)
example = "METAR KCSM 162353Z AUTO 07011KT 10SM TS SCT100 28/19 A3000 RMK AO2 PK WND 06042/2325 WSHFT 2248 LTG DSNT ALQDS PRESRR SLP135 T02780189 10389 20272 53007="
data = pattern.match(example)
最初の10グループのために働くように見えるが、それはそれについてです....再び
おかげで皆
を、それはあなたがしていることは何ですか私はPythonに慣れていませんが、これは難しい正規表現の問題のようには見えません(regex1、field1などとは言わないでください)。 – Beta
あなたは正しいです、field1はしかし、いいえ、私は知っているフィールドをキャプチャする必要があります。存在する場合、オプションのフィールドも格納する必要があります。 –