【问题标题】:Find whole number only in string [closed]仅在字符串中查找整数[关闭]
【发布时间】:2022-01-21 22:44:01
【问题描述】:

寻找字符串中的第一个整数或字符串中单词之前的数字。

举例

string input = "hello 123.45 789 coins";

忽略 123.45 并仅将 789 转换为 int。

【问题讨论】:

  • 到目前为止,您自己尝试过什么?你遇到了什么问题?你研究了什么?请编辑您的问题以包含更多信息。我推荐taking the tour,以及阅读how to ask a good questionwhat's on topic
  • 按空格分割然后迭代。我不明白这需要复杂的思考。
  • 圣诞节的正则表达式...:\b\d+\b
  • 如果遇到数字,我会扫描该行并开始记住读取的字符。然后,如果这一系列数字后面跟有一个点以外的东西,你就找到了一个候选人。如果一个点跟在数字后面,它仍然可以是句子的结尾。因此,如果点后面有一个非数字(很可能是空白),那么到目前为止找到的数字仍然是合格的。您可能需要考虑像 1e6 这样的值。
  • 123 可以是第一个整数,在句尾(后跟一个点)45 789 也可以是一个整数,用法语表示法

标签: c# linq


【解决方案1】:

使用正则表达式

\d+(?![0-9.])

解释

  • \d 匹配一个数字(相当于 [0-9])
  • + 匹配前一个令牌一次到无限次,尽可能多次,根据需要回馈
  • 负面展望(?![0-9.])。正则表达式不匹配 匹配下面列表中存在的单个字符
  • [0-9.] 0-9 匹配 0 到 9 范围内的单个字符,
  • . 按字面意思匹配索引为 4610 的字符 (.)(区分大小写)
  • m 修饰符:多行。使 ^ 匹配每一行的开始/结束

【讨论】:

  • 欢迎来到stackoverflow。我已经格式化了您的问题,但我并不理解所有问题(“m 修饰符”?您的代码不包含它)。顺便说一句,在问题 cmets 中有一个看起来可能更好的正则表达式,您可能需要检查它,如果您使用它,请感谢 Mong Zhu。
【解决方案2】:

一些正则表达式就足够了,或者一些简单的东西,比如:

var valueString = "hello 123.45 789 coins REE";

var words = valueString.Split(' ');

for (var index = 0; index < words.Length-1 ; index++) // words.Length-1 so the last item is skipped 
{
    var word = words[index];
    var nextWord  = words[index+1]; // optionally check if the next word is an int or not?

    if (int.TryParse(word, NumberStyles.Integer, CultureInfo.InvariantCulture, out var valueInt))
    {
        Console.WriteLine(valueInt);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多