操纵字符串:检测到字符串中的一个字符,然后选择之后的所有字符

本文关键字:字符 字符串 然后 之后 一个 选择 检测 操纵 | 更新日期: 2023-09-27 18:04:48

我使用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中对最后一个短划线后面的任何数字进行子选择,例如:-15-999

该角色应灵活地检测最后一个短划线后的任何数字可变长度,例如:-1-5656565656565...

在这个过程结束时,我应该有:

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

知道怎么做吗?谢谢你在这方面的帮助。

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

string original = "hi-this-is-a-string-15";
int l = original.Length;
int i = original.LastIndexOf("-");
string sub = original.Substring(i, l);
error: Index and length must refer to a location within the string. Parameter name: length 

操纵字符串:检测到字符串中的一个字符,然后选择之后的所有字符

Regex在这里会显得过于夸张。String.LastIndexOf

您可以获取最后一次出现的索引,并返回类似索引的子字符串形式。

var index = original.LastIndexOf('-');
var suffix = original.Substring(index);
var crop = original.Substring(0, index);
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是一个数字,+是一个或更多(

$将图案锚定到字符串的末尾

CCD_ 20括号中的部分被存储在捕获组中。第一个开括号===第一个捕获组(.groups[1](,第二个开括号。。。

怎么样

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