0

このメッセージがあなたを元気にしてくれることを願っています。\ b式に関する簡単なチュートリアルを見つけようとしています(より良い用語がある場合はお詫びします)。現在、いくつかのxmlファイルを解析するためのスクリプトを作成していますが、速度が少し向上しています。私のxmlの例を示します:

<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>

<...>は重要ではなく、関連性のないxmlコードです。主にCustomerIDとOrderIdに焦点を当てます。

私の問題は、上記のステートメントと同様に、文字列の解析にあります。完全に機能するregexParse定義があります。ただし、直感的ではありません。44444444を含む文字列の部分のみを一致させる必要があります。

私の現在の設定は次のとおりです。

searchPattern = '>\d{8}</CustomerId'

素晴らしい!それは機能しますが、私はそれを正しい方法でやりたいと思っています。私の考えは、1)8桁の数字を見つけること、2)その後、CustomerIdと一致する単語の境界が数値でない場合は、それを返すことです。

アイディア:

searchPattern = '\bd{16}\b'

私のテストでの私の問題は、数字の前後のどこかにCustomerIdの検索を組み込むことです。誰かが私の問題を手伝ってくれるのか、それとも正しい道を私に向けてくれるのか(ガイドなどの言葉で)疑問に思っていました。どんな助けでも大歓迎です。

これが間違った領域にある場合は、Mods申し訳ありませんが、Python正規表現がこの機能をサポートしているかどうかわからないため、Pythonのディスカッションに投稿したいと思います。

どうもありがとうございました、

ダルクマスタ

4

3 に答える 3

0
txt = """
<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
"""

import re
pattern = "<(\w+)>(\d+)<"
print re.findall(pattern,txt)
#output  [('OrderId', '123456'), ('CustomerId', '44444444')]
于 2012-08-15T17:03:09.700 に答える
0

人間が読みやすいように、正規表現でルックバック演算子を使用することを検討してください。

import re
a = re.compile("(?<=OrderId>)\\d{6}")
a.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['123456']
b = re.compile("(?<=CustomerId>)\\d{8}")
b.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['44444444']
于 2012-08-15T17:06:49.917 に答える
0

生の文字列リテラルを使用する必要があります。

searchPattern = r'\b\d{16}\b'

プレーンな(生ではない)文字列リテラルのエスケープシーケンス\bはバックスペース文字を表すため、reモジュールはそれを受け取ります(\dそのまま渡されるなどの認識されないエスケープシーケンス、つまりバックスラッシュの後に「d」が続きます)。

于 2012-08-15T18:58:53.980 に答える