1

コンピューターのテキスト ファイルに大量のコードがあります。ファイル内の 2 種類のコードに興味があります。彼らです:

<string>objectiwant1 <string2>objectiwant2</string2></string>

<string>objectiwant1 </string>

最初のものは [(objectiwant1, objectiwant2)] (存在する場合はさらにタプルを含む) を返し、2 番目のものは [(objectiwant1, None)] を返します。

正規表現を作成しようとしていますが、これまでのところ欠陥のあるコードは次のようになります。

regularexpression = r'<string>(.*) <string2>(.*)</string2>'

「re.findall(regularexpression, file)」を使用してデータを返しています。string と string2 の両方が使用されている場合にのみ、必要なものを返します。使用:

regularexpression = r'<string>(.*) (<string2>(.*)</string2>)|(</string>)

OR 演算子で比較したいステートメントを区切るために必要な (.*) 内のデータのみではなく、大きな括弧内のすべてを、時には 2 回返します。

re.findall がデータを 2 回出力し、一度に大量のデータを出力しないように、括弧を区切るために使用できるものがあるかどうか疑問に思っています。

また、ステートメントが満たされていない場合に正規表現を使用してデータを出力する方法があるかどうかも疑問に思っています (したがって、objectiwant2 が存在しない場合は、出力を選択できます)。

前もって感謝します。

4

1 に答える 1