C# 如何在C中从字符串中获取数字#

C# 如何在C中从字符串中获取数字#,c#,regex,C#,Regex,我在HTML中有一个字符串(1-3/3 Trip)如何获取数字3(Trip之前)并将其转换为int。我想使用它作为计数 找到了这个代码 public static string GetNumberFromStr(string str) { str = str.Trim(); Match m = Regex.Match(str, @"^[\+\-]?\d*\.?[Ee]?[\+\-]?\d*$"); return (m.Value); } 但是它只能得到1个数字如果我正确地阅读了你的

我在HTML中有一个字符串(1-3/3 Trip)如何获取数字3(Trip之前)并将其转换为int。我想使用它作为计数

找到了这个代码

public static string GetNumberFromStr(string str)
{
  str = str.Trim();
  Match m = Regex.Match(str, @"^[\+\-]?\d*\.?[Ee]?[\+\-]?\d*$");
  return (m.Value);
}

但是它只能得到1个数字

如果我正确地阅读了你的问题,你会得到一个字符串,它是一个单位数数字,后跟'Trip',你想得到数值吗

public static int GetTripNumber(string tripEntry)
{
    return   int.Parse(tripEntry.ToCharArray()[0]);
}
试试这个:

public static int GetNumberFromStr(string str)
{
    str = str.Trim();
    Match m = Regex.Match(str, @"^.*of\s(?<TripCount>\d+)");

    return m.Groups["TripCount"].Length > 0 ? int.Parse(m.Groups["TripCount"].Value) : 0;
}
public static int GetNumberFromStr(string str)
{
str=str.Trim();
Match m=Regex.Match(str,@“^.*of\s(?\d+));
返回m.Groups[“TripCount”].Length>0?int.Parse(m.Groups[“TripCount”].Value):0;
}

在您的情况下,正则表达式是不必要的开销。试试这个:

int ExtractNumber(string input)
{
    int number = Convert.ToInt32(input.Split(' ')[2]);
    return number;
}
谷歌的其他有用方法:

// throws exception if it fails
int i = int.Parse(someString);

// returns false if it fails, returns true and changes `i` if it succeeds
bool b = int.TryParse(someString, out i);

// this one is able to convert any numeric Unicode character to a double. Returns -1 if it fails
double two = char.GetNumericValue('٢')

不太确定您的意思是不是总是将“(x-y of y Trip)”作为您解析的字符串的一部分……如果您查看模式,它只捕捉到接受.Ee+-作为分隔符的“x-y”部分。如果你想抓住“y-Trip”部分,你必须看另一个正则表达式

如果将返回类型改为int而不是string,则可以执行一个简单的操作:

Match m = Regex.Match(str, @"(?<maxTrips>\d+)\sTrip");
return m.Groups["maxTrips"].Lenght > 0 ? Convert.ToInt32(m.Groups["maxTrips"].Value) : 0;
Match m=Regex.Match(str,@“(?\d+)\sTrip”);
返回m.Groups[“maxTrips”]。长度>0?转换为32(m.Groups[“maxTrips”].值):0;

忘记正则表达式。此代码使用空格作为分隔符拆分字符串,并获取索引2位置的数字

string trip = "1-3 of 3 trip";
string[] array = trip.Split(' ');
int theNumberYouWant = int.Parse(array[2]);
另一种方法是:

public static int[] GetNumbersFromString(string str)
{
   List<int> result = new List<int>();
   string[] numbers = Regex.Split(input, @"\D+");
   int i;

   foreach (string value in numbers)
   {
      if (int.TryParse(value, out i))
      {
         result.Add(i);
      }
   }

   return result.ToArray();
}
publicstaticint[]GetNumbersFromString(stringstr)
{
列表结果=新列表();
字符串[]number=Regex.Split(输入@“\D+”);
int i;
foreach(以数字表示的字符串值)
{
if(int.TryParse(值,out i))
{
结果.添加(i);
}
}
返回result.ToArray();
}
如何使用的示例:

const string input = "There are 4 numbers in this string: 40, 30, and 10.";
int[] numbers = MyHelperClass.GetNumbersFromString();

for(i = 0; i < numbers.length; i++)
{
    Console.WriteLine("Number {0}: {1}", i + 1, number[i]);
}
const string input=“此字符串中有4个数字:40、30和10。”;
int[]numbers=MyHelperClass.GetNumbersFromString();
对于(i=0;i
输出:

电话:4

电话:40

电话:30

电话:10


感谢:

对不起,请您澄清一下。你有一个像“123”这样的字符串,你想把所有的数字都提取成一个整数?他清楚地说这个字符串是“1-3/3”。(问题没有显示是否经过编辑)对于非母语人士:什么是“三选一旅行”?你能举个例子吗?@k3b-作为一个母语人士,我也有点好奇。字符串是(x-y of y trip),我试图在trip之前得到“y”我希望我的解释是cleartripEntry将是“1-3 of 3 trip”:因此返回值是1,但应该是3(第二个)@PowerRoy-这已经很明显了,但当我回答“对不起”时,我不是很清楚。对于您提到的情况,这显然不起作用。谢谢,这起作用:)但是您能解释一下这一部分吗。Split(“”)[2]@someguy-input.Split在本例中(“”)在空格上拆分字符串,并返回在源字符串的空格之间找到的字符串数组。当然[2]会索引数组中的第三个字符串,即OP问题中的数字3。