3

Beautiful Soup を使用して、特定のタグとその内容を識別しています。コンテンツは html リンクであり、これらのタグのテキストを抽出したいと考えています。

問題は、テキストが特定のパターンに従って異なる数字で構成されていることです。「61993J0417」や「61991CJ0316」などの数字にのみ関心があり、数字の真ん中に「J」と「CJ」がある場合、両方に一致する正規表現が必要です。

私はこれを達成するためにこのコードを使用しました:

soup.find_all(text=re.compile('[6][1-2][0-9]{3}[J]|[CJ][0-9]{4}'))

スープ変数は、特定のタグの内容です。このコードは、10 件中 9 件で機能します。ただし、ソース ファイルの 1 つでこのスクリプトを実行すると、「51987PC0716」などの数字にも一致します。

理由がわからないので、あなたに助けを求めます。

4

2 に答える 2

3

IIUC さん、文字列には常に「J」が含まれています。したがって、必須にし、疑問符を使用して「C」をオプションにします。何かのようなもの:

re.compile('6[1-2][0-9]{3}C?J[0-9]{4}')

私はこれをテストしていませんが、おそらくここから自分で続行できます。

于 2012-04-25T07:04:22.860 に答える
3

|が何に適用されるかを指定していません。デフォルトでは、正規表現全体です。つまり、どちらかを要求したことを意味します

[6][1-2][0-9]{3}[J]

(これは と同じです6[12][0-9]{3}Jまたは

CJ[0-9]{4}

( not [CJ]、これは「C または J のいずれか」を意味します)。かっこを使用して、代替手段を指定します。

^6[12][0-9]{3}(J|CJ)[0-9]{4}$

どちらがよりよく書かれています

^6[12][0-9]{3}C?J[0-9]{4}$
于 2012-04-25T07:06:02.770 に答える