首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何简化XSLT regex-group中的匹配-substring到更简单的mataintain行

如何简化XSLT regex-group中的匹配-substring到更简单的mataintain行
EN

Stack Overflow用户
提问于 2017-05-12 09:18:36
回答 1查看 286关注 0票数 0

您好,我最近使用XSLT将txt消息拆分成xml文件,但是当我使用xsl:matching-substring时出现了问题,因为太多的regex,我必须计算regex-group(n)。有没有什么办法可以简化这些方法呢?

这就是我要做的:

代码语言:javascript
复制
<xsl:variable name="lineA" as ="xs:string" select="'SAMPLE\+TEXT:1\+((\S+)?):ZZ\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>
<xsl:variable name="lineB" as ="xs:string" select="'SAMPLE\+ALPHA:2\+((\S+)?):ZZ\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>
<xsl:variable name="lineC" as ="xs:string" select="'SAMPLE\+BETA:3\+((\S+)?)\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>

总共大约有30++行

因此,我使用:

代码语言:javascript
复制
<xsl:for-each select="$lines">
  <xsl:analyze-string select="." flags="x"
        regex="({$lineA})\r?\n?({$lineB})?\r?\n?({$lineC})?\r?\n?({$lineD})?\r?\n?({$lineE}).....> 

那个....是到行号30++

然后我使用:

代码语言:javascript
复制
<xsl:matching-substring>
   <line level="0"
        variableA="{regex-group(1)}"
        variableB="{regex-group(2)"
        variableC="{regex=group(3)"
        variableD="{regex=group(4)"

这可能导致我从上到下计算上面的正则表达式,直到30++单个行,以获得很难维护的regex-group。

有没有更简单的方法来解决这个问题来维护这几行代码?

EN

回答 1

Stack Overflow用户

发布于 2017-05-12 22:17:07

我发现将处理过程分解成较小的步骤通常会有所帮助。

在我看来,您的输入由许多行组成,并且您希望使用不同的逻辑处理每一行。

因此,首先使用一个简单的tokenize($input, '\r?\n')拆分成几行;然后可能将这些行绑定到变量,比如

代码语言:javascript
复制
<xsl:variable name="lineC" select="$tokens[3]"/>

然后用它自己的正则表达式处理每一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43927869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档