我在常规表达中很可怕并且可以使用一些帮助。
我得到类似“Tell:IIDString: 456456456:Somebody's Name "
的字符串,但有时候数字为零。名称总是以空格结尾。我想提取名称,并认为Regex将是要走的路,但我似乎无法让它工作。
static void Main(string[] args)
{
string txt = "Tell:IIDString: 456456456:Somebody's Name ";
// txt = "Tell:IIDString: 0:Somebody's Name ";'
Match m = Regex.Match(txt, @"Tell:IIDString: \d+:([A-z\']+)\.\w", RegexOptions.IgnoreCase);
if (m.Success)
{
Console.WriteLine(m.Value);
}
}
答案 0 :(得分:0)
这是一个匹配整个示例输入的正则表达式,捕获名称并修剪它:
^Tell:IIDString:\s*\d+:(?<name>[A-Z' ]+?)\s*$
请参阅IDEONE demo:
string txt = "Tell:IIDString: 456456456:Somebody's Name ";
Match m = Regex.Match(txt, @"^Tell:IIDString:\s*\d+:([A-Z' ]+?)\s*$", RegexOptions.IgnoreCase);
if (m.Success)
Console.WriteLine(m.Groups["name"].Value); // Note the group is referred by its name
正则表达式匹配:
^
- 字符串开头Tell:IIDString:
- 给定字符的文字序列\s*
- 0个或更多空格符号\d+:
- 一个或多个数字后跟:
(?<name>[A-Z' ]+?)
- 一个命名的捕获组,我们稍后将通过名称引用,匹配1个或多个拉丁字符,撇号和文字空格(如果有可能,则替换为\s
任何空格或\p{Zs}
,如果只允许水平空格)\s*$
- 字符串末尾有0个或更多个空格符号($
是行锚的结尾)。