我一直在试图解决这个问题,但我认为我对正则表达式的理解还不够深入,无法到达我需要的地方。
我有类似于这些的字符串:
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/