1. ホーム
  2. regex

[解決済み] XPathのcontains関数で正規表現を使用する方法

2022-02-10 09:56:25

質問

以下のテキストにマッチングさせたい sometext12345_text を以下の正規表現で使用します。

私はこれをSeleniumテストの一つで使っています。

String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));

しかし、うまくいかないようです。誰か助けてくれませんか?

解決方法は?

XPath 1.0は正規表現をネイティブに扱わないので、次のような方法を試してみてください。

//*[starts-with(@id, 'sometext') and ends-with(@id, '_text')]

(paul t.さんのご指摘の通りです。 //*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))] を使えば、中間の数字もチェックする必要がある場合に、元の正規表現と同じチェックを行うことができます)。

XPath 2.0 では、次のようにします。

//*[matches(@id, 'sometext\d+_text')]