我有一系列字符串,我需要提取它们中的某一部分。我想使用正则表达式来做到这一点。这些字符串都有这种一般形式:
content/landdata/files/Albuquerque_123.zip
除了城市名称,大多数字符串都是静态的。它可以是任何城市名称。
我已经达到了这个目标:
(?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip)
哪会给我Albuquerque_123
,但我无法摆脱_123
。
答案 0 :(得分:2)
您可以使用Match.Groups属性。
例如:
var testString = "content/landdata/files/Albuquerque_123.zip";
var regex = new Regex(@"content/landdata/files/([A-Za-z_-]+)_[0-9]+\.zip");
Console.WriteLine(regex.Match(testString).Groups[1]);
答案 1 :(得分:2)
?:
表示非捕获组,因此请在您实际要捕获的组中删除它。
(?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip)
应该是
(?!content/landdata/files/)([A-Za-z_-]*)_[0-9]+(?!\\.zip)
...然后你可以查询匹配的Groups
属性。
答案 2 :(得分:0)
你能否就“摆脱_123”提供更多背景信息?
我对你的要求的理解如下:你本质上只是试图从正则表达式字符串中删除_123,使其成为/ content / landdata / files / [城市名]
因此,如果是这种情况,请在_123上执行替换。
public class Example
{
public static void Main()
{
string pattern = "_123";
string output = Regex.Replace(input, pattern, "");
Console.WriteLine("Output: " + result);
}
}
我没有真正测试上面的代码,可能存在问题。可能还有更好的方法来做到这一点。
答案 3 :(得分:0)
这对我有用 - 将城市放入捕获组(删除?:并将组内的*移到你的组内)
content\/landdata\/files\/([A-Za-z_-]*)[_][0-9]{1,}(?!\\.zip)
答案 4 :(得分:0)
看起来你几乎就在那里。考虑以下正则表达式...
(?!content/landdata/files/)(?:[A-Za-z_-])+(?=[_][0-9]{1,}\.zip)
祝你好运!