我想用逗号分割字符串。例如name1(M, 06/06/1993), Namit2 (M, 18/05/2000)
。
首先,我想将字符串拆分为
name1(M, 06/06/1993)
Namit2 (M, 18/05/2000)
在此之后我想进一步拆分,例如name1(M, 06/06/1993)
将拆分为
name1
M
06/06/1993
案例1:name1(M,06/06/1995),name2(M,18/05/2000)
首先应该分割输出
第一项的第二次分割
1.name1 2.M 3.06 / 06/1995
案例2:name1(M,26/01/2002)
可能如上所述,只有一个项目
案例3:name1(M),名称2(F)
首先拆分
第一项的第二次分割
案例4:Nikesh,Nihar
首先拆分
答案 0 :(得分:0)
尝试以下方面的内容:
(.+)\),(.+)
(.+)\s\((.+),\s(.+)\)
答案 1 :(得分:0)
不知道您选择的语言,但在Java中您可以这样做:
string s1="name1(M, 06/06/1993)";
string[] tokens = Regex.Split(s1, ",\\s*|\\(\\s*|\\s*\\)");
foreach (string token in tokens) {
Console.WriteLine(token);
}
<强>输出:强>
[name1, M, 06/06/1993]
答案 2 :(得分:0)
我会在Oracle中执行REGEXP_REPLACE函数。像下面的东西
REGEXP_REPLACE ( 'name1(M, 06/06/1993), Namit2 (M, 18/05/2000)',
'.+\), ') A,
REGEXP_REPLACE ( 'name1(M, 06/06/1993), Namit2 (M, 18/05/2000)',
'\), .+', ')') B
在上述案例中A = Namit2(M,18/05/2000) 而B = name1(M,06/06/1993)
您可以将A和B存储在不同的变量中,然后对它们运行更多的regExp以将它们拆分。
答案 3 :(得分:0)
这应该拆分每一行
[^\(|,]+?\(.{13}\)(?=,|\.)
这将进一步分割每场比赛
\(|,|\)
我使用RegExBuddy使用.NET正则表达式引擎测试它。
这应该拆分两种变体
[\w\d\s]+?\([^\)]+\)
答案 4 :(得分:0)
我只使用Regex.Split
作为第一个示例,使用此正则表达式
\s*,(?![^(]*\))\s*
表示拆分,
(前后可选空格)。重要的部分是这个负向前瞻(?![^(]*\))
,如果前面有一个收盘圆括号,但之前没有开盘,它就会失败。
这意味着在第一步中,我将分开不在括号内的逗号。
对于第二次拆分,我在圆括号上使用普通String.Split
一个带有StringSplitOptions.RemoveEmptyEntries
的逗号,以避免因为右括号而在末尾有一个空条目。
对于您的示例,这可以为您提供所需内容:
String s1 = "name1(M, 06/06/1995), name2(M, 18/05/2000)";
String s2 = "name1(M, 26/01/2002)";
String s3 = "name1 (M), name 2(F)";
String s4 = "Nikesh, Nihar";
String[] input = { s1, s2, s3,s4 };
String[] Split1 = {};
List<String[]> Result = new List<String[]>();
foreach (String item in input) {
Console.WriteLine("Splitting: " + item);
Split1 = Split1.Concat(Regex.Split(item, @"\s*,(?![^(]*\))\s*")).ToArray();
}
foreach (String item in Split1) {
Console.WriteLine("Splitting: " + item);
Result.Add(item.Split(new char[]{ '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries));
}
foreach (String[] item in Result) {
Console.WriteLine(string.Join(", ", item.Select(v => v.ToString())));
}
Console.ReadLine();