这个问题来自.net regex - strings that don't contain full stop on last list item
问题现在在下面。请注意,示例已被修改并增加了更多内容-所有这些都需要满足。好的示例应该不返回匹配项,而不好的示例应该返回匹配项。
我正在尝试使用.net正则表达式来标识XML数据中的字符串,这些字符串在最后一个标记之前不包含句号。我对正则表达式没有太多经验。我不确定我需要更改什么以及为什么要获得想要的结果。
数据中每行的末尾都有换行符和回车符。
模式用于XML。 我们无法访问.Net代码-仅使用自定义构建的应用程序的用户。
XML数据错误的示例1-应该给出1个匹配项:
<randlist prefix="unorder">
<item>abc</item>
<item>abc</item>
<item>abc</item>
</randlist>
错误的XML数据的示例2-应该给出1个匹配项:
<randlist prefix="unorder">
<item>abc. abc</item>
<item>abc. abc</item>
<item>abc. abc</item>
</randlist>
良好XML数据的示例1-regexp不匹配-最后</item>
之前的句号:
<randlist prefix="unorder">
<item>abc</item>
<item>abc</item>
<item>abc.</item>
</randlist>
良好XML数据的示例2-regexp不应该匹配-最后一个</item>
之前的句号:
<randlist prefix="unorder">
<item>abc. abc</item>
<item>abc. abc</item>
<item>abc. abc.</item>
</randlist>
我针对无效XML数据(未经良好XML数据测试)的上述条件,尝试了无效的Reg exp模式(使用https://regex101.com/的误报或不匹配):
^<randlist \w*=[\S\s]*\.*[^.]*<\/item>[\n]*<\/randlist>$
^\s+<item>[^<]*?(?<=\.)<\/item>$