我有一个字符串:
" a.1.2.3 #4567 "
我希望将其减少到“1.2.3”。
目前正在使用Substring()和Remove(),但如果在英镑符号后面有更多数字,则会中断。
这样做的最佳方法是什么?我读了很多关于正则表达式的问题。 string.split,但我无法得到任何我尝试在VB.net中工作的东西。我是否必须进行匹配然后使用匹配结果替换?
非常感谢任何帮助。
答案 0 :(得分:1)
这应该有效:
string input = " a.1.2.3 #4567 ";
int poundIndex = input.IndexOf("#");
if(poundIndex >= 0)
{
string relevantPart = input.Substring(0, poundIndex).Trim();
IEnumerable<Char> numPart = relevantPart.SkipWhile(c => !Char.IsDigit(c));
string result = new string(numPart.ToArray());
}
的 Demo 强>
答案 1 :(得分:1)
试试这个......
String[] splited = split("#");
String output = splited[0].subString(2); // 1 is the index of the "." after "a" considering there are no blank spaces before it..
答案 2 :(得分:1)
这是正则表达方式
string input = " a.1.2.3 #4567 ";
Regex regex = new Regex(@"(\d\.)+\d");
var match = regex.Match(input);
if(match.Success)
{
string output = match.Groups[0].Value;//"1.2.3"
//Or
string output = match.Value;//"1.2.3"
}
答案 3 :(得分:0)
如果英镑符号是最相关的位,请依赖Split
。示例VB.NET代码:
Dim inputString As String = " a.1.2.3 #4567 "
If (inputString.Contains("#")) Then
Dim firstBit As String = inputString.Split("#")(0).Trim()
Dim headingToRemove As String = "a."
Dim result As String = firstBit.Substring(headingToRemove.Length, firstBit.Length - headingToRemove.Length)
End If
就这是一个多语言问题而言,这里是C#的翻译:
string inputString = " a.1.2.3 #4567 ";
if (inputString.Contains("#"))
{
string firstBit = inputString.Split('#')[0].Trim();
string headingToRemove = "a.";
string result = firstBit.Substring(headingToRemove.Length, firstBit.Length - headingToRemove.Length);
}
答案 4 :(得分:0)
我想使用展开的另一种方式
\d+ (?: \. \d+ )+