我需要使用XPath來選擇從以下字符串日期:在短語中選擇日期的正確Xpath子字符串是什麼?
44KB - 先生李四 - 13年1月1日
我不相信你可以選擇的「第三次迭代 - '爲類似
substring-after($string, '-'[3])
我該怎麼做?有沒有辦法從第一個'/'之前的空間抓取子字符串到日期結束?
在此先感謝
我需要使用XPath來選擇從以下字符串日期:在短語中選擇日期的正確Xpath子字符串是什麼?
44KB - 先生李四 - 13年1月1日
我不相信你可以選擇的「第三次迭代 - '爲類似
substring-after($string, '-'[3])
我該怎麼做?有沒有辦法從第一個'/'之前的空間抓取子字符串到日期結束?
在此先感謝
如果只有兩個短劃線,在所提供的例子中,一個可以簡單地使用這個XPath 1.0表達式:
substring-after(substring-after('44kb - Mr John Doe - 1/1/13', '- '), '- ')
如果已知該日期是什麼串結尾,和日期的長度爲6,則可以使用:
substring('44kb - Mr John Doe - 1/1/13', string-length('44kb - Mr John Doe - 1/1/13') -5)
備選地:
translate(substring('44kb - Mr John Doe - 1/1/13',
string-length('44kb - Mr John Doe - 1/1/13') -7),
'- ', '')
這裏我們不知道日期的長短,所以我們取最後的8個字符,在這些我們刪除任何破折號或空格。
fn:substring-after(...)
只分裂一次,所以你將不得不申請兩次了。
substring-after(substring-after('44kb - Mr John Doe - 1/1/13', ' - '), ' - ')
如果您的XPath處理器支持它(至少XPath 2.0中),您還可以使用fn:tokenize(...)
拆分到各個部位,然後使用位置謂詞來獲取第三個。
tokenize("44kb - Mr John Doe - 1/1/13", ' - ')[3]
如果零件的數量可以改變,但日期總是最後一個,你也可以使用
tokenize("44kb - Mr John Doe - 1/1/13", ' - ')[last()]
總是最後部分匹配。
我無法使用2.0 Xpath處理器,但是您的第一個示例使我拍了額頭。只是嵌套兩個substring-after函數。我應該意識到這將起作用。當然,如果有例子,在字符串中有三個破折號,這將不會抓住他們,但我沒有遇到過任何一個。謝謝! – 2013-05-01 20:25:22
這工作。我不得不弄亂字符串的長度,但它的確有竅門。就這樣我理解了這裏發生的三件事情:字符串長度給了我一個包含字符串長度的數值。子串-7給我......字符串的後半部分......字符串中的最後八個位置......?並翻譯刪除破折號或空格?感謝Dimitre的幫助! – 2013-05-01 20:20:08
@rally_point,是的,基本上,你的理解是正確的:如果我們事先不知道實際的日期長度,我們採用最大可能的長度(8)並從這個子字符串中刪除任何破折號或空格。也可以從這個字符串中刪除任何非數字和非斜槓字符,但這有點複雜(「雙重翻譯」方法)。 – 2013-05-01 21:26:26