【发布时间】:2011-11-04 08:55:27
【问题描述】:
我得到一个这样的文本行:
SOMENAME (KEYONE(任何字符) - KEYTWO(由数字组成) - KEYTHREE - KEYFOUR) - KEYFIVE
我需要一个正则表达式来提取密钥。键之间的分隔符是“
空间线空间
”。
我得到了这个工作除了KEYONE之外的所有东西。问题是 KEYONE,可能包含
像这样的空格或线条(不是同时):
- SOMENAME(KEY-ONE - KEYTWO - KEYTHREE - KEYFOUR) - KEYFIVE
- SOMENAME(键一 - 键二 - 键三 - 键四) - 键五
问题是第一个关键,到目前为止我已经尝试了这两个表达式:
- `^(\\s-\\s]+` 适用于字符和数字,但如果 KEYONE 包含空格或行,则中断。
- `(a-z0-9]+` 这适用于数字和空格,但如果 KEYONE 只是数字则中断。
如果我不能完成这项工作,我会改为进行字符串拆分。
感谢所有帮助! :)
完整代码:
Regex emailregex = new Regex("(?<DOCCLASS>[^( - $ ]+) - (?<DOCNO>[^ - ]+) - (?<DOCSHEET>[^\\s-\\s]+) - (?<DOCREV>[^\\s-\\s)]+)");
string title = "MY%20TITLE.DOCM%20(10 003%20-%201202827%20-%201%20-%20A2)%20-%201";
String decodedTitle = Uri.UnescapeDataString(title);// //Server.UrlDecode(documentSharepointTitle);
Match m = emailregex.Match(decodedTitle);
if (m.Success)
{
Console.WriteLine("DOC_CLASS: " + m.Groups["DOCCLASS"].Value);
Console.WriteLine("DOC_NO: " + m.Groups["DOCNO"].Value);
Console.WriteLine("DOC_SHEET: " + m.Groups["DOCSHEET"].Value);
Console.WriteLine("DOC_REV: " + m.Groups["DOCREV"].Value);
Console.WriteLine("DOC_TYPE: " + m.Groups["DOCTYPE"].Value);
}
else
{
Console.WriteLine(decodedTitle + " , does not match document title pattern.");
}
Console.WriteLine();
System.Console.WriteLine("Press Enter to Continue...");
System.Console.ReadLine();
【问题讨论】:
-
欢迎来到 Stack Overflow!您正在询问一个正则表达式问题,但未指定您的正则表达式类型是否是 Perl、EGrep、Javascript、Awk、Vim,……请提供更多详细信息!
标签: regex