[英]C# RegEx.Split delimiter followed by specific words
我試圖使用像這樣的Regex.Split
字符串進行拆分:
string criteria = "NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
我們有以下'保留字': NAME, COURSE, TEACHER, SCHEDULE, CAMPUS.
需要將原始字符串拆分為:
NAME='Eduard O' Brian'
COURSE='Math II'
TEACHER = 'Chris Young'
SCHEDULE='3'
CAMPUS='C-1'
Split
的標准是:使用簡單引號,后跟一個或多個空格,后跟“保留字”。
我達到的最接近的表達是:
var match = Regex.Split(criteria, @"'[\s+]([NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS])", RegexOptions.CultureInvariant);
這是完整的源代碼:
using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string criteria = "NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
var match = Regex.Split(criteria, @"'[\s+]([NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS])", RegexOptions.CultureInvariant);
foreach (var item in match)
Console.WriteLine(item.ToString());
Console.Read();
}
}
}
我的代碼是這樣做的:
NAME='Eduard O' Brian' COURSE='Math II
T
EACHER = 'Chris Young
S
CHEDULE='3
C
AMPUS='C-1
它正在刪除最后一個簡單的引用,只取保留字的第一個字母。 此示例中的COURSE有多個空格,並且無法正常工作。
提前致謝!
你可以簡單地用1+個空格分開,然后用你的保留字跟着=
:
var results = Regex.Split(s, @"\s+(?=(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)\s*=)");
請參閱正則表達式演示
圖案細節
\\s+
- 一個或多個空白字符 (?=
- 在當前位置的右側立即開始一個正向前瞻,需要以下文字:
(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)
- 任何替代文字文本 \\s*
- 0個或更多個空格字符(因為保留字和=
之間可以有空格) =
- 一個等號 )
- 前瞻的結束。 C#demo :
var criteria = "NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
var match = Regex.Split(criteria, @"\s+(?=(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)\s*=)");
Console.WriteLine(string.Join("\n", match));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.