操作字符串:检测字符串中的字符,然后选择所有字符

时间:2011-08-09 08:40:16

标签: c# regex string

我使用asp.net 4和c#。

我有一个字符串:

string original = "hi-this-is-a-string-15"

请注意右-15

的最后3位数字

现在是相同的字符串,但在最后一个破折号后面有更多数字

hi-this-is-a-string-9999

请注意右-9999

的最后5个字母

我需要一个RegEx或其他解决方案,允许我在<{>>最后一个破折号之前的任何数字string original上进行子选择{/ 1}}或{{1 }}

角色应该灵活,以检测任何数字变量长度最后一次破折号 ex:-15-999

在流程结束时我应该:

-1

知道怎么做吗?感谢您的帮助。

我的原始代码(生成错误):

-5656565656565...

4 个答案:

答案 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";