我使用asp.net 4和c#。
我有一个字符串:
string original = "hi-this-is-a-string-15"
请注意右-15
现在是相同的字符串,但在最后一个破折号后面有更多数字
hi-this-is-a-string-9999
请注意右-9999
我需要一个RegEx或其他解决方案,允许我在<{>>最后一个破折号之前的任何数字string original
上进行子选择{/ 1}}或{{1 }}
角色应该灵活,以检测任何数字变量长度最后一次破折号 ex:-15
或-999
在流程结束时我应该:
-1
知道怎么做吗?感谢您的帮助。
我的原始代码(生成错误):
-5656565656565...
答案 0 :(得分:4)
正则表达式在这里将是一种矫枉过正。 String.LastIndexOf
答案 1 :(得分:3)
您可以获取最后一次出现的索引并返回索引之类的子字符串形式。
var index = original.LastIndexOf('-');
var suffix = original.Substring(index);
var crop = original.Substring(0, index);
答案 2 :(得分:1)
String Original = "hi-this-is-a-string-15";
Regex A = new Regex(@"^(.*)(-\d+)$");
var ResultA = A.Match(Original);
Console.Write("Found Match A: ");
Console.WriteLine(ResultA.Groups[0]);
Console.WriteLine(ResultA.Groups[1]);
Console.WriteLine(ResultA.Groups[2]);
ResultA.Groups[0]
将包含原始字符串(完整匹配)
ResultA.Groups[1]
包含第一个捕获组(直到最后一个破折号的部分)
ResultA.Groups[2]
包含第二个捕获组(最后一个破折号和后面的数字)
这是正则表达式^(.*)(-\d+)$
^
将模式锚定到字符串的开头
.*
匹配任何字符0次或更多次
-\d+
匹配-
后跟一个或多个数字(\d
是一个数字,+
是一个或多个)
$
将模式锚定到字符串的末尾
()
括号中的部分存储在捕获组中。第一个开口支架==&gt;第一个捕获组(.groups[1]
),第二个开放括号......
答案 3 :(得分:0)
怎么样
string original = "hi-this-is-a-string-15";
String newS=original.Substring(19);//newS="-15";
string original = "hi-this-is-a-string-9999";
String newS=original.Substring(19);//newS="-9999";