此正则表达式问题是this question
的扩展输入
String input="first number <start number>123.45<end number>
and second number 678.90."
所需的输出
String output="first number <start number>123.45<end number>
and second number <start number>678.90<end number>."
我尝试了什么
我对<number start>
有一个否定的回顾,对<number end>
有一个否定的预测:
String regex="(?<!(<number start>))\\d+(\\.\\d+)?(?!(<number end>))
// ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
// negative lookback negative lookahead
// ^^^^^^^^^^^^^
// float match
但问题是,对于字符串<number start>12.34<number end>
,它将匹配2.3
。
当我在回顾中包含量词时,我得到一个错误
String regex="(?<!(<number start>\\d+))\\d+(\\.\\d+)?(?!(\\d+<number end>))
// ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
// negative lookback negative lookahead
// ^^^^^^^^^^^^^
// float match
感谢您的帮助!
答案 0 :(得分:0)
这是一个极其缓慢的WebBrowser
功能的限制。对于lookbehind,您不能拥有与任意长度的文本匹配的表达式。这是错误消息告诉我们的内容。
您可以尝试这样的事情:
HTML DOM
然后相应地替换文本。
答案 1 :(得分:0)
您可以在其后的外观中添加一个\d
,而不用添加一个{1>}:
(?<!<number start>|\d)\d+(?:\.\d+)?(?!\d|<number end>)
后向/前行中的竖线字符(|
)是布尔“或”。此解决方案与您尝试的解决方案相似,但是不会引起异常,因为后向值具有固定长度。
为了更详细地解释它,由于正则表达式应该与十进制数匹配,因此不能有前导或尾随数字,因为它们应该是匹配的一部分。因此,也禁止使用它们(禁止使用负向查找/向前查找)。