我有一个字符串:
" a.1.2.3 #4567 "
我想把它减少到“1.2.3”。
当前使用 Substring() 和 Remove(),但如果在井号后面有更多数字,则会中断。
这样做的最佳方法是什么?我已经阅读了很多关于 regex 和 string.split 的问题,但我无法得到任何我尝试在 VB.net 中工作的东西。我是否必须进行匹配然后使用匹配结果替换?
任何帮助将非常感激。
这应该有效:
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());
}
尝试这个...
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..
这是正则表达式的方法
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"
}
如果井号是最相关的位,请依赖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);
}
我猜另一种使用展开的方式
\d+ (?: \. \d+ )+