【问题标题】:Combine TrimStart and TrimEnd for a String将 TrimStart 和 TrimEnd 组合成一个字符串
【发布时间】:2013-04-02 06:57:56
【问题描述】:

我有一个带有一些字母和数字的字符串。这里是一个例子:

OG000134W4.11

我必须修剪所有的第一个字母和第一个零才能得到这个:

134W4.11

我还需要从他将遇到的第一个字母中删除字符以最终检索:

134

我知道我可以使用多个“修剪”来做到这一点,但我想知道是否有一种有效的方法来做到这一点。

谢谢。

【问题讨论】:

  • 你用正则表达式标记了这个,所以你似乎知道这是一种合适的技术。你试过了吗?你做了什么?你的代码在哪里?
  • +1,适当的正则表达式将为您提供所需的内容。

标签: c# regex string c#-4.0 trim


【解决方案1】:

如果你不想使用正则表达式.. 那么 Linq 是你的朋友

    [Test]
    public void TrimTest()
    {
        var str = "OG000134W4.11";
        var ret = str.SkipWhile(x => char.IsLetter(x) || x == '0').TakeWhile(x => !char.IsLetter(x));
        Assert.AreEqual("134", ret);
    }

【讨论】:

  • 请注意retIEnumerable<char>。要获取字符串,请使用new String(ret.ToArray())
  • 非常感谢,成功了。我对 LINQ 不是很习惯,但是那行代码完全可以理解。
【解决方案2】:

这是我要使用的正则表达式

([1-9][0-9]*)[^1-9].*

这里有一些你可以尝试的 C# 代码

var input = "OG000134W4.11";
var result = new Regex(@"([1-9][0-9]*)[^1-9].*").Replace(input, "$1");

【讨论】:

    【解决方案3】:
    using System;
    using System.Text.RegularExpressions;
    
    namespace regex
    {
    class MainClass
    {
        public static void Main (string[] args)
        {
            string result = matchTest("OG000134W4.11");
            Console.WriteLine(result);
        }
    
        public static string matchTest (string input)
        {
            Regex rx = new Regex(@"([1-9][0-9]+)\w*[0-9]*\.[0-9]*");
            Match match = rx.Match(input);
    
            if (match.Success){
                return match.Groups[1].Value;
            }else{
                return string.Empty;
            }
        }
    }
    }
    

    【讨论】:

    • 如果原始发帖人想要提取的数字中有 0,则您的正则表达式将不起作用。即 OG000104W4.11 不起作用
    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多