gpt4 book ai didi

regex - 如何使用 XSLT 3.1 "replace"函数在括号外用逗号删除另一个数字之后的数字

转载 作者:行者123 更新时间:2023-12-03 23:07:07 25 4
gpt4 key购买 nike

我用逗号找到两个以上的数字,但我的正则表达式在括号内或括号外找到数字。如何找到不在括号内的数字。

使用正则表达式

([0-9]+, ){2,}

字符串
Albemarle Paper Co. v Moody (1975) 422 US 405, 425, 95 S Ct 2362

Expected Result

Albemarle Paper Co. v Moody (1975) 422 US 405, 95 S Ct 2362

In particular, my XML looks like

<root>
<p><styled-content><italic>Agarwal v Johnson </italic>(1979) 25 C3d 932, 942, overruled on *6 other grounds in <italic>White v Ultramar, Inc.</italic> (1999) 21 C4th 563</styled-content></p>
</root>

这是带有正则表达式和替换功能的 XSL 模板:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="root">
<xsl:copy>
<p><xsl:value-of select="replace(p/styled-content, '[0-9]+(?:, [-0-9]+)+,(?![^()]*\))', '')"/></p>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

最佳答案

注意 : 现在,你添加了 XSD 标签,注意你不能在 XML Schema regex 中使用前瞻:“特别值得注意的是完全没有像插入符号和美元、单词边界和环视这样的 anchor 。”。

XML Schema 1.1 支持 xs:assertion s。有了以下内容,您就可以放心 123, 345, 567 text匹配和 (123, 345, 567) text(123, 345, 567) 123, 345, 567 text不要:

<xs:element name="your_element">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:assertion test="not(matches($value, '.*\([^()]*([0-9]+, ){2,}[^()]*\).*'))"/>
<xs:assertion test="matches($value, '.*([0-9]+, ){2,}.*')"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

下面的答案适用于其他使用前瞻的引擎:
[0-9]+(?:, [-0-9]+)+(?![^()]*\))

proof .它将找到逗号分隔的数字序列,后面没有非括号字符直到右括号。

如果逗号必须出现在第二个或更多数字之后,只需添加它:
[0-9]+(?:, [-0-9]+)+,(?![^()]*\))
^
|___ HERE

updated demo

关于regex - 如何使用 XSLT 3.1 "replace"函数在括号外用逗号删除另一个数字之后的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61834969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com