Используйте matches()
, что соответствует регулярному выражению, а не contains()
, который проверяет наличие буквенных подстрок.
Я бы также предложил использовать .
вместо text()
, поскольку это строковое значение элемента, которому вы хотите соответствовать, а не text()
дочерний узел.
В целом XPath для выбора целевого элемента будет:
//*[@class='body' and matches(text(),'(20\d{2}).(\d{1,2}).(\d{1,2})')]
Я хотел бы получить thi1te_t
в окончательном выводе, вероятно, с помощью регулярных выражений ^.{8}$
и grep.
Вы можете вернуть эту подстроку путем токенизации строки значение элемента, соответствующего вышеуказанному XPath, а затем выбор строки, соответствующей заданному регулярному выражению:
tokenize(//*[@class='body' and matches(text(),'(20\d{2}).(\d{1,2}).(\d{1,2})')],
'\s*\n\s*')[matches(.,'^.{8}$')]
Это выражение XPath возвращает thi1te_t
в соответствии с запросом.