一些信息:
我有一个Delphi XE正则表达式:
(?<=[*+\/drt><=≥≤≠])\-
输入字符串:
-(2*3)
RegEx必须匹配使表达式为负的'-'。例如:
-(2*3) //Must Match
但不是:
2 - 3 //Must not Match
在上面的示例中,运算符为负号,不会使整个表达式为负。
我的解决方案是上面的正则表达式,它仅在运算符后匹配减号。如果减号前的char是变量,数字或其他定义的关键字,则不会匹配。
我的问题
如果减号位于字符串的开头,则正则表达式不匹配,因为即使字符使整个表达式为负,也不会在前面加上char。我如何匹配这个减号,即使它在字符串的开头并且前面没有字符?
答案 0 :(得分:1)
要匹配正字符类中的字符串开头或char是
(?<=^|[*+/drt><=≥≤≠])-
^^
请参见online demo。
但是,如果只处理独立的字符串,则将正向后的隐式字符转换为正字符类,并用负向后的字符类转换为负向后字符的替代方法更为有效:
(?<![^*+/drt><=≥≤≠])-
请参见another regex demo。仅一个接一个地测试字符串,而不是在多行模式下全部测试。
请注意,您无需在字符类外转义-
。也不需要转义/
字符,它也不是特殊的正则表达式元字符,并且您不需要在Delphi中将其用作正则表达式定界符。
答案 1 :(得分:0)
也许您可以尝试?
(\-\().+(\))
以“-(”,任何字符开头,后跟“)”。
结果...
-(2*3) //Must Match
2 - 3 //Must not Match
test -(2*3) //Must Match??
test -( 2*3 ) //Must Match??
test -() //Must not Match??
test -( ) //Must Match??