我想要匹配这些内容
_T('收到我');
_T("双引号();");
_T("双引号,我有两个参数",1);
_T("收到双引号,我有三个参数","第二个",'男');
用_T(([^)]*));匹配时得到
共找到 4 处匹配:
_T('收到我');
_T("双引号();
_T("双引号,我有两个参数",1);
_T("收到双引号,我有三个参数","第二个",'男');
在第二行只能得到 _T("双引号();,不能的得到_T("双引号();");
请问大佬们该怎么解决?
C#正则怎么匹配嵌套的括号的内容
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- lshen01 2023-03-17 09:43关注
参考GPT和自己的思路:
针对这个问题,可以使用正则表达式的“零宽度断言”来解决嵌套括号的匹配问题。具体的正则表达式如下:
\_T\((?>[^()]+|\((?<>)|\)(?<->)|(?<ce>)\))*\)(?(ce)(?!))
该正则表达式的解释如下:
- 首先匹配 "_T(" 字符串;
- 然后使用“零宽度正预测先行断言”(?>([^()]+|((?<>)|)(?<->)|(?)))*)),匹配括号内的内容;
- 在这个断言中,我们使用了栈来处理嵌套的括号,具体的含义如下:
- [^()]+ 匹配除了括号之外的所有字符;
- ((?<>) 匹配左括号,并将一个空的组压入栈中;
- )(?<->) 匹配右括号,并将一个组弹出栈中;
- (?))* 匹配右括号后面的内容,并将一个空的组压入栈中,以便在整个表达式结束时检查是否所有的括号都已经正常匹配,如果没有,就需要匹配失败。
- 最后,使用“(?(ce)(?!))”来检查是否所有的括号都已经正常匹配,如果没有,就需要匹配失败。
这个正则表达式可以正确地匹配所有给出的测试用例,包括嵌套的括号和单引号、双引号混合的情况。
解决 无用评论 打赏 举报
悬赏问题
- ¥50 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥200 uniapp长期运行卡死问题解决
- ¥15 latex怎么处理论文引理引用参考文献
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?