我想知道是否可以使用analysting-string
并在RegEx中设置多个组,然后将所有匹配的组存储在变量中以供以后使用。
像这样:
<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
<xsl:matching-substring>
<xsl:variable name="varX">
<xsl:value-of select="regex-group(1)"/>
</xsl:variable>
<xsl:variable name="varY">
<xsl:value-of select="regex-group(2)"/>
</xsl:variable>
</xsl:matching-substring>
</xsl:analyze-string>
这实际上不起作用,但这正是我想要的,我知道我可以将分析字符串封装在一个变量中,但这似乎很愚蠢,因为对于每个我必须处理正则表达式的组,效率不是很高,我应该能够处理正则表达式一次,并存储所有组以供以后使用。
有什么想法吗?
这种转换表明,为了获得所需的结果,不需要xsl:analyze-string,而是存在一种更简单、通用的解决方案
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*[matches(., '^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee')]">
<xsl:variable name="vTokens" select=
"tokenize(replace(., '^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee', '$1 $2'), ' ')"/>
<xsl:variable name="varX" select="$vTokens[1]"/>
<xsl:variable name="varY" select="$vTokens[2]"/>
<xsl:sequence select="$varX, $varY"/>
</xsl:template>
</xsl:stylesheet>
当应用于此XML文档时:
<t>Blah 123 Bloo 4567 Blee</t>
产生想要的正确结果:
123 4567
在这里,我们不依赖于知道RegEx(可以作为参数提供)和字符串——我们只需将字符串替换为RegEx组的分隔字符串,然后我们对其进行标记,并且Tokenize()
生成的序列中的每个项目都可以很容易地分配给相应的变量。
我们不必在临时文件中找到想要的结果。树——我们只是把它们都放在一个结果序列中。
很好
<xsl:variable name="groups" as="element(group)*">
<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
<xsl:matching-substring>
<group>
<x><xsl:value-of select="regex-group(1)"/></x>
<y><xsl:value-of select="regex-group(2)"/></y>
</group>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
帮助?这样您就有了一个名为group
的变量,它是带有捕获的group
元素的序列。
例如,我们有一个字符串:asd/asd/asd/1#s_ 我需要匹配以下部分:/asd/1#s_或asd/1#s_如何使用普通正则表达式? 我试过像这样的消极前瞻,但它不起作用 它匹配这个“前缀/asd/1#s_”,我需要匹配“/asd/1#s_”中的这个“/asd/1#”,我需要匹配“/asd/1#s_”,而没有所有前面的 /asd/'s 匹配应该与普通正则表达式没有任何编程语言的任何帮助函数h
问题 你想要匹配两个或多个字符串。 解决方案 计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。 levenshtein = (str1, str2) -> l1 = str1.length l2 = str2.length prevDist = [0..l2] nextDist = [0..l2] for i in [1..l1] by 1
如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(
我有一个逗号分层的字符串,当调用时,它返回大约60的数组大小。在特定的用例中,我只需要从数组中返回第二个值的值。例如,
问题内容: 我想同时执行完全的单词匹配和部分的单词/子字符串匹配。例如,如果我搜索“男士剃须刀”,那么我应该能够在结果中找到“男士剃须刀”。但是,如果我搜索“剃须刀”,那么在结果中我也应该能够找到“剃须刀”。我使用以下设置和映射: 索引设置: 对应: 插入记录: 查询: 1.按完全匹配的词组进行搜索- >“男式” 上面的查询在返回结果中返回“男士剃须刀”。 2.按部分单词匹配搜索- >“ en’s
问题内容: 我发现能够在运行时创建新变量并创建结果字典以供以后处理(即写入文件)非常有用。 这将创建字典条目[result1:data1],我可以使用myDict [result1]对其进行调用。我一直在使用vars()而不真正了解我在做什么。我认为它返回带有局部变量(?)的字典,并且 vars()[x] = y 创建一个新的[x:y]字典条目? 我有一个脚本,其中传递了一个用{input1:da