我正在处理NEMSIS XSD中的紧急服务数据。我有一个字段,它被限制为只有50个字符。我对这个网站进行了广泛的搜索,并尝试了许多解决方案-- Notepad++拒绝了所有的解决方案,说找不到。
下面是一个XML示例:
<E09>
        <E09_01>-5</E09_01>
        <E09_02>-5</E09_02>
        <E09_03>-5</E09_03>
        <E09_04>-5</E09_04>
        <E09_05>this one is too long Non-Emergency - PT IS BEING DISCHARGED FROM H AFTER BEING ADMITTED FOR FAILURE TO THRIVE AND ALCOHOL WITHDRAWAL</E09_05>
</E09>
<E09>
        <E09_01>-5</E09_01>
        <E09_02>-5</E09_02>
        <E09_03>-5</E09_03>
        <E09_04>-5</E09_04>
        <E09_05>this one is is okay</E09_05>
</E09>我尝试过以不同的方式命名E09_05标记的解决方案,使用<\/E09_05>作为结束标记,就像我在一些示例中看到的那样,并且就像我在其他示例中看到的那样使用</E09_05>。我尝试过在它们之间使用^.{50,}$,或者在它们之间使用[a-zA-Z]{50,}$,我也尝试过用()和不用表达式包装那些中间的表达式。我甚至尝试了在标签之间使用[\s\S]*?。当我单独使用不带XML标记的^.{50,}$时,Notepad++会发现唯一的问题……但后来我点击了所有的E13_01标签(它们都是EMS的叙述,而且总是大于50个字符) --造成了痛苦和令人手腕疼痛的点击。
我想要对此进行XSLT,但是有太多的针对每个E09_05字段的单独的、动手的there来自动化它。在这种环境中,Perl不是一个选择(而且我也不知道它是什么工具)。
要真正完美,字符串长度大于50的E09_05和E09_08字段都需要在搜索中选择...但没有其他任何类型或长度的元素。
提前谢谢。我确信我只是错过了一些微妙的\、()或[]。希望..。
发布于 2020-02-02 05:40:19
下面的正则表达式将查找超过50个字符的<E09_05>元素的文本内容。
(?<=<E09_05>).{51,}?(?=</E09_05>)
解释
(?<=<E09_05>)     Start matching right after <E09_05>
.{51,}?           Match 51 or more characters (in a single line)
                  The ? makes it reluctant, so it'll stop at first </E09_05>
(?=</E09_05>)     Stop matching right before </E09_05>对于真正完美的匹配,即字符串长度大于50的E09_05和E09_08字段,请使用:
(?<=<(E09_0[58])>).{51,}?(?=</\1>)
解释
<(E09_0[58])>     Match <E09_05> or <E09_08>, and capture the name as group 1
</\1>             Use \1 backreference to match name inside </name>如果想要在文本末尾加上省略号来缩短文本,例如,最大长度为8的Hello World变为Hello...,请使用:
查找内容:(?<=<(E09_0[58])>)(.{47}).{4,}(?=</\1>)
替换为:\2...
https://stackoverflow.com/questions/60021258
复制相似问题