C# 中的 RegExpr 用于获取值
我有 C# 中的任何文本,我需要使用正则表达式“匹配”,并获取一个值(解析文本以获取值)。
文本:
var asunto1 = "ID P20101125_0003 -- 授权待决 --";
var asunto2 = "ID P20101125_0003 任意 发送任何文本”;
var asunto3 = "ID_P20101125_0003 任意 发送任何文本”;
我需要获取值:
var peticion = "P20101125_0003";
我有这个正则表达式,但对我来说失败了:
//ID P20101125_0003 -- Pendiente de autorización --
patternPeticionEV.Append(@"^");
patternPeticionEV.Append(@"ID P");
patternPeticionEV.Append(@"(20[0-9][0-9])"); // yyyy
patternPeticionEV.Append(@"(0[1-9]|1[012])"); // MM
patternPeticionEV.Append(@"(0[1-9]|[12][0-9]|3[01])"); // dd
patternPeticionEV.Append(@"(_)");
patternPeticionEV.Append(@"\d{4}");
//patternPeticionEV.Append(@"*");
patternPeticionEV.Append(@"$");
if (System.Text.RegularExpressions.Regex.IsMatch(asuntoPeticionEV, exprRegular, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
var match = System.Text.RegularExpressions.Regex.Match(asuntoPeticionEV, exprRegular, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
//...
}
I have any text in C#, and I need "match" using Regular Expressions, and get a value (parsing the text for get the value).
Texts:
var asunto1 = "ID P20101125_0003 --
Pendiente de autorización --";var asunto2 = "ID P20101125_0003 any
text any text";var asunto3 = "ID_P20101125_0003 any
text any text";
I need get the value:
var peticion = "P20101125_0003";
I have this regular expression, but fails for me:
//ID P20101125_0003 -- Pendiente de autorización --
patternPeticionEV.Append(@"^");
patternPeticionEV.Append(@"ID P");
patternPeticionEV.Append(@"(20[0-9][0-9])"); // yyyy
patternPeticionEV.Append(@"(0[1-9]|1[012])"); // MM
patternPeticionEV.Append(@"(0[1-9]|[12][0-9]|3[01])"); // dd
patternPeticionEV.Append(@"(_)");
patternPeticionEV.Append(@"\d{4}");
//patternPeticionEV.Append(@"*");
patternPeticionEV.Append(@"$");
if (System.Text.RegularExpressions.Regex.IsMatch(asuntoPeticionEV, exprRegular, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
var match = System.Text.RegularExpressions.Regex.Match(asuntoPeticionEV, exprRegular, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
//...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您的正则表达式以“$”结尾,表示“行/文本必须在那里结束”。你不想要这样。只要去掉这一行:
它基本上会立即起作用。然后,您只需添加一个捕获组来隔离所需的文本位。
我还建议添加
using System.Text.RegularExpressions;
,这样您就不必每次都完全限定Regex
。您还可以调用Match
然后检查是否成功,以避免匹配两次。示例代码:
Your regular expression ends with "$" which says "the line/text has to end there". You don't want that. Just get rid of this line:
and it will mostly work immediately. You then just need to add a capturing group to isolate the bit of text that you want.
I'd also recommend adding
using System.Text.RegularExpressions;
so that you don't have to fully qualifyRegex
each time. You can also callMatch
and then check for success, to avoid matching it twice.Sample code:
这可能只是我的问题,但对于将字符串解析为有意义的值之类的事情,我更喜欢做一些更详细的事情,如下所示:
This might be just me but for things like parsing strings into meaningful values I prefer to do something more verbose like this:
为什么不使用如下所示的子字符串:
Why not use substring like below:
这个正则表达式将为您提供所需的字符串
This regex will give you desired string