我正在使用.NET执行正则表达式匹配,看起来像这样:
1;#Lists/General Discussion/Waffles Win 2;#Lists/General Discussion/Waffles Win/2_.000 3;#Lists/General Discussion/Waffles Win/3_.000
我需要匹配最后没有数字的URL部分,以便我得到:
Lists/General Discussion/Waffles Win
这是我正在尝试的正则表达式:
(?:\d+;#)(?<url>.+)(?:/\d+_.\d+)*
问题是最后一组是作为中间组比赛的一部分而被包含的。我也尝试过没有*的结尾但只有上面的第一个字符串匹配而不是其余的。
我启用了多行选项。有什么想法吗?
答案 0 :(得分:3)
一些不同的选择:
@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"
这匹配尽可能少的路径段,然后是可选的最后一个部分,以及行的结尾。
@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"
这匹配尽可能多的路径段,只要它不是该行末尾的数字部分。
@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"
这匹配尽可能少的字符,然后是可选的最后一部分,以及该行的结尾。
答案 1 :(得分:0)
你可以尝试
^(\d+;#)([^/]+(/[^\d][^/]*)*)
获得第二组。第一组匹配1;#
;第二组分为第一部分或URL(假设包含除/之外的任何字符),然后匹配任意数量的/,后跟非数字,后跟除/之外的任何内容。
在this site上测试,似乎可以做你想要的。尝试使用更多样本。