C# 介于之间的正则表达式,从最后一个端点到特定端点

C# 介于之间的正则表达式,从最后一个端点到特定端点,c#,regex,C#,Regex,今天我的愿望是从字符串中提取文本。 此字符串必须介于最后一个斜杠和.partX.rar或.rar之间 首先,我试图找到edge的词尾,然后是开头。在得到这两个元素后,我合并了它们,但得到的结果是空的 字符串: http://hosting.xyz/1234/15-game.part4.rar.html http://hosting.xyz/1234/16-game.rar.html 正则表达式: 开始:[^/]*$-从上一个开始/ 结束:.*?=.part[0-9]+.rar |.rar在.

今天我的愿望是从字符串中提取文本。 此字符串必须介于最后一个斜杠和.partX.rar或.rar之间

首先,我试图找到edge的词尾,然后是开头。在得到这两个元素后,我合并了它们,但得到的结果是空的

字符串:

http://hosting.xyz/1234/15-game.part4.rar.html

http://hosting.xyz/1234/16-game.rar.html
正则表达式:

开始:[^/]*$-从上一个开始/

结束:.*?=.part[0-9]+.rar |.rar在.partX.rar或.rar之前停止

如你所见,如果我合并这些代码,我将不会得到任何结果。 更重要的是,结束只选择我.partX而不是.partX.rar

我想要的是: 15-game.part4.rar和16-game.rar

我尝试的是:

(([^/]*)$)(.*(?=.part[0-9]+.rar|.rar))

(([^/]*)$)

(.*(?=.part[0-9]+.rar|.rar))
我也试过了

/[a-zA-Z0-9]+
但我不知道如何选择符号。。这可能是最简单的方法。但这只选择字母和数字,而不选择-或。
如果我能选择符号..

没有比这更简单的了!:-

使用以下命令:

new Regex("^.*\/(.*)\.html$")
您将在第一个捕获的组中找到您的文件名,因为手头没有c编译器,所以无法提供工作示例,但您现在有了一个工作的正则表达式!:-


请参见此处的演示:

您不需要正则表达式,因为您只需在/上拆分url,然后获取所需的文件名部分。因为您没有提到语言,下面是一个Perl实现:

use strict;
use warnings;

my $str1="http://hosting.xyz/1234/15-game.part4.rar.html";

my $str2="http://hosting.xyz/1234/16-game.rar.html";

my $file1=(split(/\//,$str1))[-1]; #last element of the resulting array from splitting on slash

my $file2=(split(/\//,$str2))[-1];

foreach($file1,$file2)
{
  s/\.html$//; #for each file name, if it ends in ".html", get rid of that ending.
  print "$_\n";
}
输出为:

15-game.part4.rar
16-game.rar

我不是C程序员,因此无法在这里编写完整的代码,但我认为您需要像下面这样的负前瞻支持:

new Regex("/(?!.*/)(.+?)\.html$");
匹配的组1将有您的字符串,即16-game.rar或15-game.part4.rar使用两个正则表达式:

开始将。*/替换为零; 然后将\.html替换为零。
工作完成了

他至少发布了一些他尝试过的东西。正如我所说的,[^/]*$.*.=.part[0-9]+.rar |。rar这个我试过了,我也试过[^/]*..*.*.[^/.part[0-9]+.rar |。rar,我也试过/[a-zA-Z0-9]+,但我不知道如何选择符号。。这可能是最简单的方法。但这只选择字母和数字,而不是--你知道怎么选择吗。dot?你在用什么语言工作?Java/Javascript/C?啊。然后将其放入正则表达式构造函数:^.*\/.$。在某些语言中,前导斜杠和尾随斜杠是正则表达式文字的一部分。是的,我知道,但在C语言中没有,并且.html是不需要的。C给了我所有链接的源代码。显然,他在使用C:-是的,对不起,忘了代码语言。我认为正则表达式是通用的。顺便说一句,你的代码对我帮助很大。我忘了规则之吻!:但是它不是正则表达式,doh!:请您解释一下这个正则表达式命令,我将不胜感激。提前谢谢!当然,我会试试的。此正则表达式基本上具有负前瞻/?!**/这意味着匹配a/,后面没有一些文本和另一个/。这基本上确保了我们只匹配last/。Rest是直接向前的,+?\.html与最后有.html的文本匹配。