0

私はタグ名のみ<および>記号なし)を一致させようとしていますが、これは通常のタグの場合です。

<w:tag w:attrib1="http://url" w:attrib2="anyValue">

ソロタグ(開閉タグ)を一致させない場合:

<w:tag2 w:attrib1="anyValue" w:attrib2="http://url" />

(属性のURLにはスラッシュ()が含まれているため、注意してください/

しかし、それを達成することができませんでした:

regex = re.compile('(?<=<)w:\w+(?=[\w\W]+>)(?!\s/>)')

print(regex.findall(string))

これを取得する:

['w:tag','w:tag2']

これを期待して:

['w:tag']

何かご意見は?

乾杯。

4

2 に答える 2

1

1)先読み/後読みを簡単にします。それらを制御するのは難しく、実際にそれらを必要とすることはめったにありません。キャプチャグループを使用して、一致した文字列の一部を抽出します。一致しすぎないように、否定的な文字クラスと貪欲でない検索(必要な場合)を使用します。

re.findall(r'<\s*(w:\w+)[^>]*(?<!/)>', string)

読みやすいですね。でも、

2)これは絶対にしないでください!XMLやhtmlと一致するREに依存しないでください。ただ、失恋を求めているだけです。詳細については、 https://stackoverflow.com/a/1732454/699305を参照してください。:-)xml.etree.ElementTree代わりにxpath式でPythonを使用することに慣れてください。慣れるまでには少し時間がかかりますが、十分に時間を費やすことができます。後悔することはありません。

于 2012-10-27T21:00:12.123 に答える
0

それを見つけた:

regex = re.compile('(?<=<)w:\w+(?=>)|(?<=<)w:\w+(?=[\s\w+:\w+="[\w/:.-]+"]{0,10}>)')
于 2012-10-27T18:00:41.747 に答える