操纵字符串:检测到字符串中的一个字符,然后选择之后的所有字符
本文关键字:字符 字符串 然后 之后 一个 选择 检测 操纵 | 更新日期: 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";