私はscrapyを使用しています。何か数字を入力し、ダッシュを続け、数字の後に空白を入れ、次に2文字-3mm)。それはxpath 1.0正規表現の使用を許可していないようです。私はstart-with()とends-with()のようないくつかの回避策を見いだしましたが、私が見たことからは文字でしか使用していませんでした。助けてください。xpath 1.0のcontains関数を使用して数値を選択する
答えて
があった場合Scrapyは内部lxml
を使用し、lxml
's XPath has support for regular expressions via EXSLTあなたは、対応する名前空間を追加するとき。
デフォルトでは、治療はそのようにしてyou can use re:test()
within XPath expressionsを述語のブール値として使用します。
boolean re:test(string, string, string?)
再:最初の引数として与えられた文字列が2番目の引数として与えられた正規表現に一致する場合、テスト関数は真を返します。
>>> import scrapy >>> t = u"""<!DOCTYPE html> ... <html lang="en"> ... <body> ... <p>ab-34mm</p> ... <p>102-d mm</p> ... <p>15-22 µm</p> ... <p>1-3 nm</p> ... </body> ... </html>""" >>> selector = scrapy.Selector(text=t) >>> selector.xpath(r'//p/text()[re:test(., "\d+-\d+\s\w{2}")]').extract() [u'15-22 \xb5m', u'1-3 nm'] >>>
編集:
この例Python2セッションを参照してくださいEXSLT re:match
を使用するEXSLT re:match
を使用して注意することは少しトリッキー、またはre:test
よりも少なくとも小さい自然です。 re:match
は同様であるシグネチャがre:test
異なるMatchObject
を返すPythonのre.match
:
object regexp:match(string, string, string?)
正規表現:match関数は、一致要素のノードセットを返す
だからre:match
<match>
要素を返します。これらの<match>
要素から文字列を取得するには、関数を述語の内部ではなく「外部」関数として使用する必要があります。
次の例鎖XPath式、
- が最終的にこれら
re:match
の結果を抽出括弧グループ - を含む正規表現を用いて、各段落の文字列値(正規化)に一致次いで
<p>
段落 - を選択電話
Python2シェル:
>>> for p in selector.xpath('//p'):
... print(p.xpath(ur're:match(normalize-space(.), "(\d+)-(\d+)\s(\w{2})")').extract())
...
[]
[]
[u'<match>15-22 \xb5m</match>', u'<match>15</match>', u'<match>22</match>', u'<match>\xb5m</match>']
[u'<match>1-3 nm</match>', u'<match>1</match>', u'<match>3</match>', u'<match>nm</match>']
>>>
xpath 1.0でこれを行うには、translate関数を使用できます。
translate(@test , '1234567890', '..........')
は、任意の数字(数字)をドットで置き換えます。
あなたの番号は常に1桁あなたが何かしようとしている場合は、次の数字が長い桁上よりもできれば
[translate(@test , '1234567890', '..........') = '.-. mm']
をあなたは- mm
[translate(@test , '1234567890', '') = '- mm']
のために何もしてテストして番号を交換しようとするかもしれません
しかし、これはいくつかののfalse truesを持つことができます。それらを避けるために、あなたがサブ-前-after長に確認する必要があります少なくとも一桁
- 1. Xpath "contains"関数で変数node-setを使用する方法
- 2. XPath 1.0 EXSLTを使用する変数のmax関数
- 3. 変数をXPath選択の一部として使用する
- 4. プロンプトを使用したプロンプトでの複数選択contains operator
- 5. Contains関数を使用してListViewから選択したアイテムを取得する方法
- 6. 複数のdivノードをC言語でxpathを使用して選択する#
- 7. Sql集計関数を使用して列の値を選択するクエリ?
- 8. xpathを使用してインラインスタイルからcssプロパティ値を選択
- 9. postgresql関数で選択クエリの戻り値をキャッチして使用します。
- 10. xpath 1.0のカウント関数を表現する方法は?
- 11. xpathを使用して同じ値を持つ複数の要素を選択する方法
- 12. 共用体でxPathを使用してノードを選択する
- 13. xpathを使用して複数の段落からテキストを選択
- 14. 変数として日を使用して値を選択
- 15. 選択値を持つ関数を使用して変数値を変更する
- 16. Xpathを使用してXSDスキーマ内のノードを選択する
- 17. 選択ドロップダウンリストを使用してjavascript関数を呼び出す
- 18. 変数を使用して:contains - howへ
- 19. xpathの属性をpowershellでxpathを使用して選択する
- 20. 複数の選択値を関数に渡して画像を更新する
- 21. jqGridパラメータ化クエリを使用して関数を選択
- 22. 複数選択jqueryプラグインを使用してLaravelで複数選択値を取得する
- 23. 複数の動的レコードのjQueryでonchange関数を使用してオプション値を選択しますか?
- 24. HTML複数選択ボックス、jQueryを使用して複数のアイテムを選択
- 25. XPathを使用してラジオボタンを選択してください
- 26. 複数の動的レコードからjQueryで$(document).ready関数を使用してオプション値を選択しますか?
- 27. wso2 esbのXpath関数を使用
- 28. テンプレートを使用して関数の正しいバージョンを選択する
- 29. XPATHでcontainsとfollowing-siblingを使用しています
- 30. wso2プロパティ値のxpath選択
申し訳ありませんが、私は混乱しています。私が必要とするものが自分自身である場合、なぜ数字をドットで置き換えるのですか? –
私は特別な形式の数字を含むノードを選択する必要があると思った。これが間違っているならば、目標は数字を抽出することですか?既に選択されたノードからですか? –
ポール・トムブルトの答えはまさに私が必要とするものだと思います。とにかくありがとう! :) –