使用正则表达式从C#中的字符串中获取子字符串
本文关键字:字符串 获取 正则表达式 | 更新日期: 2023-09-27 18:19:25
我有一个字符串,比如:
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函数将字符串拆分为一个数组,然后使用regex跳过所有空条目(否则拆分会在开头包含空字符串,您可以使用Skip(1)
而不是Where(a=>!string.IsNullOrEmpty(a))
,最后使用string.Join将数组组合回字符串,''n作为分隔符。
您可以使用regex.Replace直接转换为,但在开始时您将''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?"
小时>为什么不用简单的方法呢?我的意思是,如果常规部分是"简短练习#-#",用一些拆分字符替换它,然后拆分得到的字符串以获得您想要的内容。
如果你不这样做,你将永远不得不照顾特殊情况。
string pattern = "Brief Exercise 'd+-'d+";
Regex reg = new Regex(patter);
string out = regex.replace(yourstring, "|");
string results[] = out.split("|");