我想在输入中使用Regex匹配引号/列表中的第一个数字/单词/字符串。例如,它应该匹配那些:
“你好世界” gdfigjfoj sogjds
-14.5 fdhdfdfi dfjgdlf
test14 hfghdf hjgfjd
(a(c b 7))(3 4)“hi”
正则表达式的任何想法或我如何开始?
谢谢。
答案 0 :(得分:2)
答案 1 :(得分:2)
如果要匹配平衡括号,正则表达式不适合作业。一些正则表达式实现确实促进了递归模式匹配(PHP和Perl,我知道),但AFAIK,C#不能这样做(编辑:请参阅下面的Steve的评论:.NET也可以这样做,之后全部)。
你可以使用正则表达式匹配一定的深度,但是你的脸很快会爆炸。例如,这个:
\(([^()]|\([^()]*\))*\)
含义
\( # match the character '('
( # start capture group 1
[^()] # match any character from the set {'0x00'..''', '*'..'ÿ'}
| # OR
\( # match the character '('
[^()]* # match any character from the set {'0x00'..''', '*'..'ÿ'} and repeat it zero or more times
\) # match the character ')'
)* # end capture group 1 and repeat it zero or more times
\) # match the character ')'
将匹配(a (c b 7))
和(a (x) b (y) c (z) d)
等单个嵌套括号,但无法匹配(a(b(c)))
。
答案 2 :(得分:0)
对于前三种情况,您可以使用:
^("[^"]*"|[+-]?\d*(?:\.\d+)?|\w+)
对于最后一个,我不确定正则表达式是否可以匹配最后一个右括号。
编辑:使用建议的balanced matching作为最后一个:
^\([^()]*(((?<Open>\()[^()]*)+((?<Close-Open>\))[^()]*)+)*(?(Open)(?!))\)