【发布时间】:2016-09-14 22:56:26
【问题描述】:
我有一个 .net 正则表达式(我必须使用正则表达式),它目前通过简单地匹配捕获组(捕获测试以传递给方法)之间的任何非单词字符来工作。
在大多数情况下它可以正常工作,但在要传递给方法的文本是负数的情况下,非单词匹配会消耗减号并将正数传递给方法。更复杂的是,捕获组之间的非单词字符可能包含像“ - ”这样的文本,应该被使用。文本也可能是货币值,如“$200”,在这种情况下,“$”也应该被消耗掉。
我尝试使用非单词字符,直到一个数字后面跟着一个数字,然后检查该数字之前是否有除减号以外的其他内容,如果是,则仅使用。我的正则表达式是:
\W+(?!\d(?<![^-]))
但是这似乎不像我预期的那样工作,因为这似乎仍然消耗我的减号,导致一个正数被传递给我的方法。
我的正则表达式错了吗?或者我可以不向前看,然后从向前看的位置向后看?
我怎样才能得到想要的结果,即这个文本:
" -100"
仅匹配开头的空格。还有这段文字:
" $200"
匹配空格和 $ 符号。
还有这段文字:
" - 100"
匹配空格、减号和后面的空格,但不匹配数字。
可以找到一个例子here
【问题讨论】:
-
看起来您可能会使用
\W+(?!(?<![^-])\d)或更好的 -\W+(?!(?<=-)\d)