c# - 正则表达式提取括号之间还包含其他括号的字符串

标签 c# regex string perl

我一直在试图解决这个问题,但我认为我对正则表达式的理解还不够深入,无法到达我需要的地方。

我有类似于这些的字符串:

filename.txt(1)attribute, 2)attribute(s), more!)
otherfile.txt(abc, def)

基本上,一个字符串始终以文件名开头,然后在括号之间包含一些文本。我试图提取主括号之间的部分,但是那里的文本绝对可以包含任何内容,甚至可以包含更多括号(通常如此。)

最初,有一个像这样的“hacky”表达:

/\(([^@]+)\)\g

它一直有效,直到我们遇到输入字符串包含 @ 的情况,我们陷入困境。显然...

我无法更改字符串的生成方式,它始终是一个文件名,然后是一些括号以及内部长度和内容未知的内容。

我希望有一个简单的正则表达式,因为我需要它在 C# 和 Perl 中都可以工作——这样的事情可能吗?或者这是否需要更复杂的东西,比如它自己的解析方法?

最佳答案

您可以将正则表达式中的 @ 符号的异常(exception)更改为正则表达式匹配任何字符,并添加匹配从 0 到无穷大符号的量词。并且还通过删除组构造来简化您的正则表达式:

\(.*\)

下面是正则表达式的解释:

  • 符号 \( 与字符 ( 字面意思匹配。
  • .* 匹配任何字符(行终止符除外)
  • * 量词匹配次数为零到无限次 尽可能,根据需要回馈(贪婪)
  • \) 与字符 ) 字面匹配。

您可以使用regex101编写和调试您的正则表达式。

关于c# - 正则表达式提取括号之间还包含其他括号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48175619/

相关文章:

c# - 为什么 IEnumerable<T> 中的元素有时是可变的,有时是不可变的?

c# - 缺少调试目标?

c# - 如何在我的 XML 中找到所有子节点

python - 使用 Python 格式化货币

c# - 如何将带条件的嵌套 foreach 循环转换为 LINQ

java - Java 正则表达式需要进一步的帮助

Python 正则表达式 : Check for match and capture groups

python - pandas' `str.extract()` 中带有捕获组的正则表达式的预期行为

Python-仅从句子中删除单词

c++ - 什么是 `CString` ?