很难的 简单正则问题

amaodun 2008-12-03 10:53:04
要匹配出一个必有的条目str_3,和两个肯能没有,也可能有其一或二的条目,str_1,str_2:

...(str_1)(str_2)<a>str_3</a>...


括号和str_1,str_2同时出现。 能否一次匹配出来,如何做?

...全文
121 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wackyboy 2008-12-03
  • 打赏
  • 举报
回复

Regex rr = new Regex(@"\((.*?)\)?\((.*?)\)?<a>(.*?)</a>");
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 amaodun 的回复:]
谢谢min_jie,只要str1,str2,不要圆括号,是不是要改一下?

括号之间的问号代表可选是吗?
[/Quote]

是的。

那他们之间总有个什么字符隔开吧,否则怎么分辨出来?
下面当成是用,号隔开。
(?:(?<str1>[^,<]*),)?(?<str2>[^<]*)?<a>(?<str3>[^<]*)</a>
amaodun 2008-12-03
  • 打赏
  • 举报
回复
谢谢min_jie,只要str1,str2,不要圆括号,是不是要改一下?

括号之间的问号代表可选是吗?
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
(?<str1>\([^)]*\))?(?<str2>\([^)]*\))?<a>(?<str3>[^<]*)</a>
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
[)]这样也算是一种转义。。
一品梅 2008-12-03
  • 打赏
  • 举报
回复
为什么在 自定义能够匹配 '多种字符' 的表达式
[^)]不存在)字符中为什么不加转义字符\
不是这样[^\)]写呢?
一品梅 2008-12-03
  • 打赏
  • 举报
回复
在这里不用命名捕获组,用普通捕获组,也行吧?
在么?高手.
一品梅 2008-12-03
  • 打赏
  • 举报
回复
有些明白了,刚刚看了命名捕获组.
其实str1用什么表示都可以吧.
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 only_endure 的回复:]
右尖括号是什么意思呢?呵呵.
[/Quote]

(? <str1>[^)]*)你指的是这里面的吗?
<>在这里是成对出现的,(?<命名捕获组>...)
一品梅 2008-12-03
  • 打赏
  • 举报
回复
右尖括号是什么意思呢?呵呵.
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 only_endure 的回复:]
能解释一下吗?
[/Quote]

(?:\((?<str1>[^)]*)\))?

?:不记录这个捕获组
\(左括号
(?<str1>[^)]*)以str1命名的捕获组匹配0个以上非右括号字符
\)右括号
?匹配0或1个整个括号里的内容
一品梅 2008-12-03
  • 打赏
  • 举报
回复
能解释一下吗?
止戈而立 2008-12-03
  • 打赏
  • 举报
回复
可以
amaodun 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 min_jie 的回复:]
引用 2 楼 amaodun 的回复:
谢谢min_jie,只要str1,str2,不要圆括号,是不是要改一下?

括号之间的问号代表可选是吗?


是的。

那他们之间总有个什么字符隔开吧,否则怎么分辨出来?
下面当成是用,号隔开。
C# code(?:(?<str1>[^,<]*),)?(?<str2>[^<]*)?<a>(?<str3>[^<]*)</a>
[/Quote]

我前面没有说清楚,是这样。如果只有一个圆括号,里面就str1;两个的话,就是str1,str2。现在要str1,str2, 不要圆括号怎么做。
上面的似乎把括号丢了?如果写成
(?:\((?<str1>[^)]*)\))?

能匹配出 str1 不?

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧