c# - 根据 [].[] + [].[] 中的正则表达式 [].[] 和 [].[] 拆分字符串

标签 c# .net regex asp.net-mvc

我需要根据某些条件拆分字符串。

这是我的输入字符串

"([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/

相关文章:

c# - 提取属性参数值

c# - 使用列表框中对象的属性

c# - 在哪里以及如何使用嵌套类?

.net - 如何查看实体集和未提交的更改?

c# - 在文件路径中复制文件夹结构的函数

c# - 带有 2 个条件的 SQL 语句中的 WHERE 子句

c# - 如何调用 == 运算符来调用 child 的实现?

java - 正则表达式在 Java 代码中不起作用,尽管它可以在正则表达式网站上运行

javascript - 更改正则表达式

java - 使用正则表达式替换字符