我正在使用.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+)*

问题是最后一组是作为中间组比赛的一部分而被包含的。我也尝试过没有*的结尾但只有上面的第一个字符串匹配而不是其余的。

我启用了多行选项。有什么想法吗?

有帮助吗?

解决方案

一些不同的选择:

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

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

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

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

<*>

这匹配尽可能少的字符,然后是可选的最后一部分,以及该行的结尾。

其他提示

你可以尝试

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

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

此网站上进行测试,似乎可以满足您的需求。尝试使用更多样本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top