3

我正在.NET 中针对如下所示的字符串执行正则表达式匹配:

1;#Lists/General Discussion/Waffles Win
2;#Lists/General Discussion/Waffles Win/2_.000
3;#Lists/General Discussion/Waffles Win/3_.000

我需要匹配最后没有数字的 URL 部分,以便我得到这个:

列表/一般讨论/华夫饼赢

这是我正在尝试的正则表达式:

(?:\d+;#)(?<url>.+)(?:/\d+_.\d+)*

问题是最后一组被包括在中间组的比赛中。我也试过没有 * 最后但只有上面的第一个字符串匹配,而不是其余的。

我启用了多行选项。有任何想法吗?

4

2 回答 2

4

几种不同的选择:

@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"

这匹配尽可能少的路径段,然后是可选的最后一部分和行尾。

@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"

这匹配尽可能多的路径段,只要它不是行尾的数字部分。

@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"

这匹配尽可能少的字符,后跟可选的最后一部分和行尾。

于 2009-09-14T16:07:08.260 回答
0

你可以试试

^(\d+;#)([^/]+(/[^\d][^/]*)*)

并获得第二组。第一组匹配1;#; 第二组被分成第一部分或 URL(假设包含除 / 以外的任何字符),然后匹配任意数量的 / 组,后跟非数字,后跟除 / 以外的任何字符。

在这个网站上测试,似乎做你想做的事。尝试更多样品。

于 2009-09-14T16:17:40.400 回答