我想弄清楚如何编写以下正则表达式:
假设我可以检查两种类型的字符串并找到“值”:
string1 :((Task)task).ContinueWith(t =>
{
var resultProperty = t.GetType().GetProperty("Result");
var resultObject = resultProperty.GetValue(t);
Console.WriteLine("The result is " + resultObject);
});
和
string2 :CONST1:CONST2:CONST3:value
对于 string1 ,此模式可以
CONST1:CONST2:CONST4:value-12345
我抓住了第二组。但是我还需要处理“值”后跟破折号和其他值的情况。 我这样试过:
CONST1:CONST2:(CONST3|CONST4):(.*)
但是第二组CONST1:CONST2:(CONST3|CONST4):(.*)(-.*)?
将捕获 string2 中的所有内容,包括以下dash + value2(12345)。使它(.*)
也不起作用,因为string1 group2将返回空String。
有人能指出我应该朝哪个方向寻找解决方案吗?我应该深入了解前瞻,还是有一个更简单的解决方案?
提前致谢。
答案 0 :(得分:1)
不要使用
(。*),但
([^ \ - ] *)
要避免 - 在结果中。
通常最好避免使用圆点。但是给出允许字符的正面或负面列表。
答案 1 :(得分:1)
^CONST1:CONST2:(CONST3|CONST4):([^\-\W]*)(-[^\W]+)?
示例:
https://regex101.com/r/vL4uG2/2
我用以下文字测试了正则表达式:
CONST1:CONST2:CONST3:hola
CONST1:CONST2:CONST3:HOLA-43
CONST1:CONST2:CONST4:HOLA
CONST1:CONST2:CONST4:HOLA-12345