![](/img/trans.png)
[英]How to write regular expression to get the substring from the string using regular expression in 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?"
更新:
因為你可能有“問題”,以及,之間的交替Exercise
和Problem
,還需要(使用非捕獲括號):
@"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.