我有一个字符串:
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。所以我想要一些普通的正则表达式。
此方案的任何有效正则表达式?
答案 0 :(得分:3)
var regex=new Regex(@"Brief (?:Exercise|Problem) \d+-\d+\s");
var result=string.Join("\n",regex.Split(x).Where(a=>!string.IsNullOrEmpty(a)));
正则表达式将匹配“简短”,然后是“练习”或“问题”(?:使组不捕获),后跟一个空格,然后是1个或多个数字,然后是“ - ”,然后是一个或更多数字然后是空格。
第二个语句使用split函数将字符串拆分为数组,然后使用regex跳过所有空条目(否则拆分将在开头包含空字符串,您可以使用Skip(1)
而不是{ {1}},然后最后使用string.Join将数组组合回字符串,\ n作为分隔符。
你可以使用regex.Replace直接转换为\ n但是你必须在开始时使用\ n结束时才会被剥离。
- EDIT ---
如果第一个数字始终为1且第二个数字为1-50ish,则可以使用以下正则表达式来支持0-59
Where(a=>!string.IsNullOrEmpty(a))
答案 1 :(得分:2)
此正则表达式将匹配“简要练习1-”,后跟数字和可选的第二个数字:
@"Brief Exercise 1-\d\d?"
更新
由于您可能也有“问题”,因此还需要在Exercise
和Problem
之间进行更改(使用非捕获括号):
@"Brief (?:Exercise|Problem) 1-\d\d?"
答案 2 :(得分:1)
为什么不以简单的方式做到这一点?我的意思是,如果常规部分是“Brief Exercise# - #”用一些拆分字符替换它,然后拆分结果字符串以获得你想要的。
如果你这样做,否则你将始终需要处理特殊情况。
string pattern = "Brief Exercise \d+-\d+";
Regex reg = new Regex(patter);
string out = regex.replace(yourstring, "|");
string results[] = out.split("|");