簡體   English   中英

使用正則表達式從C#中的字符串獲取子字符串

[英]Get substring from string in C# using Regular Expression

我有一個像這樣的字符串:

Brief Exercise 1-1 Types of Businesses Brief Exercise 1-2 Forms of Organization Brief Exercise 1-3 Business Activities.

我想使用正則表達式突破字符串,使其類似於:

Types of Businesses
Forms of Organization
Business Activities.

請不要說我可以使用1-1、1-2和1-3來破壞它,因為它會在句子之間插入“簡短練習”一詞。 稍后我也可以進行練習1-1或問題1-1。 所以我想要一些常規的正則表達式。

這種情況下有效的正則表達式嗎?

var regex=new Regex(@"Brief (?:Exercise|Problem) \d+-\d+\s");
var result=string.Join("\n",regex.Split(x).Where(a=>!string.IsNullOrEmpty(a)));

正則表達式將匹配“ Brief”,后跟“ Exercise”或“ Problem”(?:使組無法捕獲),后跟一個空格,然后是1個或多個數字,然后是“-”,然后是一個或多個數字空間。

第二條語句使用split函數將字符串拆分為一個數組,然后使用正則表達式跳過所有空條目(否則,拆分將在開始時包含空字符串,您可以使用Skip(1)代替Where(a=>!string.IsNullOrEmpty(a)) ,然后最終使用string.Join將數組組合回以\\ n作為分隔符的字符串。

您可以使用regex.Replace直接將其轉換為\\ n,但是一開始您將不得不得到\\ n來結束剝離。

- 編輯 - -

如果第一個數字始終為1,第二個數字為1-50ish,則可以使用以下正則表達式來支持0-59

var regex=new Regex(@"Brief (?:Exercise|Problem) 1-\[1-5]?\d\s");

此正則表達式將與“簡明練習1-”相匹配,后跟一個數字和一個可選的第二個數字:

@"Brief Exercise 1-\d\d?"

更新:

因為你可能有“問題”,以及,之間的交替ExerciseProblem ,還需要(使用非捕獲括號):

@"Brief (?:Exercise|Problem) 1-\d\d?"

您為什么不以簡單的方式進行操作? 我的意思是,如果常規部分是“ Brief Exercise#-#”,則將其替換為某些拆分字符,然后拆分結果字符串以獲取所需的內容。

如果不這樣做,您將始終不得不處理特殊情況。

string pattern = "Brief Exercise \d+-\d+";
Regex reg = new Regex(patter);
string out = regex.replace(yourstring, "|");
string results[] = out.split("|");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM