我需要根据某些条件拆分字符串。
这是我的输入字符串
"([abcd_1].[column] + [ab_cd_2].[column]) / [ab_cd_3].[column]"
输入的字符串将只包含
A-Z a-z underscore(_) and numbers (0-9)
我想要的是
[abcd_1].[column]
[ab_cd_2].[column]
[ab_cd_3].[column]
我不确定我必须使用什么条件。
直到现在我都尝试过这个但无法构建正则表达式来拆分精确的字符串
Regex rgx = new Regex(@"\[(.*?)\]");
String regexpString = "([abcd_1].[column] + [ab_cd_2].[column]) / [ab_cd_3].[column]";
MatchCollection mc = rgx.Matches(regexpString);
请对此提出建议
最佳答案
你可以使用
\[[^][]*](?:\.\[[^][]*])*
参见 regex demo .
或者您使用惰性点的方式:\[.*?](?:\.\[.*?])*
.
重点是您可以添加一个带有 .
和您的初始模式的非捕获组,并对其应用 *
(零个或多个)量词。
这是一个C# demo :
Regex rgx = new Regex(@"\[.*?](?:\.\[.*?])*");
String input = "([abcd_1].[column] + [ab_cd_2].[column]) / [ab_cd_3].[column]";
MatchCollection matches = rgx.Matches(input);
foreach (Match m in matches)
Console.WriteLine(m.Value);
模式解释:
\[
- 文字[
[^][]*
-[
和]
以外的零个或多个字符(可能是替换为.*?
- 换行符以外的零个或多个字符,但尽可能少以返回有效匹配)]
- 文字]
(没有必要将其转义到 char 类之外,但您可以)(?:\.\[[^][]*])*
- 零次或多次(*
最后)出现((?:...)
用于对下面的子模式进行分组:\.
- 文字点(必须在字符类[...]
外转义)\[
- 一个[
[^][]*
- 除了[
和] 之外的零个或多个字符
]
-]
关于c# - 根据 [].[] + [].[] 中的正则表达式 [].[] 和 [].[] 拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37984412/