Regex xQuery中标记化的正则表达式
使用xPath,我得到如下文本: 小猫咪;Nam porta lacinia sapien前庭;这是我的梦想。这是一个很好的例子。我是瑞苏·奎姆 我想把它分成两个变量: var1=从开始到第一个点的文本=>如果此部分包含10个以上的单词(用空格分隔)并包含分号“;”,然后,它将从开始到第一个分号的文本 var2=文本的右侧部分 我从这段代码开始,但它没有给我想要的(我还没有处理10个单词的情况):Regex xQuery中标记化的正则表达式,regex,xpath,xquery,tokenize,Regex,Xpath,Xquery,Tokenize,使用xPath,我得到如下文本: 小猫咪;Nam porta lacinia sapien前庭;这是我的梦想。这是一个很好的例子。我是瑞苏·奎姆 我想把它分成两个变量: var1=从开始到第一个点的文本=>如果此部分包含10个以上的单词(用空格分隔)并包含分号“;”,然后,它将从开始到第一个分号的文本 var2=文本的右侧部分 我从这段代码开始,但它没有给我想要的(我还没有处理10个单词的情况): 提前谢谢。试试这个 for $p in doc('file:///c:/test.xml')//d
提前谢谢。试试这个
for $p in doc('file:///c:/test.xml')//div/blockquote/p/text()
return
if (count(tokenize(tokenize($p,'[.]')[1],'\s+')) gt 10) then
(tokenize($p,'[.]')[1])
else
(tokenize($p,';')[1])
有关参考信息,请参见。即使不使用
tokenize()
或任何正则表达式,也可以执行此操作:
for $s in 'Sed id felis mi; Nam porta lacinia sapien vestibulum egestas; Praesent nec nisl purus, eget mollis metus. Fusce euismod ante id tellus tincidunt dignissim ornare magna blandit. Nunc id risus quam.',
$vBeforeDot in substring-before($s, '.'),
$vBeforeSemiC in substring-before($s, ';')
return
($vBeforeDot
[string-length(normalize-space(.))
- string-length(translate(normalize-space(.), ' ', ''))
le 9
],
$vBeforeSemiC
)[1]
这两个返回值不是都应该改变位置吗?您的代码工作得很好(根据我的需要稍作修改之后)。谢谢:-)+1,多么出色的XPath1.0解决方案。希望我能在这个问题上投更多的票。
for $s in 'Sed id felis mi; Nam porta lacinia sapien vestibulum egestas; Praesent nec nisl purus, eget mollis metus. Fusce euismod ante id tellus tincidunt dignissim ornare magna blandit. Nunc id risus quam.',
$vBeforeDot in substring-before($s, '.'),
$vBeforeSemiC in substring-before($s, ';')
return
($vBeforeDot
[string-length(normalize-space(.))
- string-length(translate(normalize-space(.), ' ', ''))
le 9
],
$vBeforeSemiC
)[1]