在C#WinForms应用程序的文本框中查找2个已知值之间的字符串

时间:2012-10-24 19:42:58

标签: c#

示例:我想在名为target的字符串中找到1234:

string target = "55555>>><<[1234]<>>>788";

我怎样才能找到[,]之间的数字而不知道[]之前[或之后]之间有多少位数?我的项目需要一个小代码。

感谢。

4 个答案:

答案 0 :(得分:3)

using System.Text.RegularExpressions;

...

// Declare target
string target = "55555>>><<[1234]<>>>788";

// Declare the regular expression
Regex regex = new Regex(
    @"(?<=\[)[0-9]+(?=\])",
    RegexOptions.None
);

// Use regex to get value
string number = regex.Match(target).Value;

// Convert to number (optional)
int value = 0;
int.TryParse(number, out value);

// Note: value will be 0 if no matches are found.

这个正则表达式的作用:

第一位(?<=\[)是“向后看”。它确保括号进行数字处理。你必须用反斜杠转义它,因为括号是正则表达式中的特殊字符。

中间位[0-9]+查找任何数字中的一个或多个。如果您想要零或更多,则可以使用星号而不是加号:[0-9]*

最后一位(?=\])是“向前看”,类似于“向后看”。支架再次被转义。

输出将只是没有括号的数字,但仅当数字被括号括起时才会输出。

答案 1 :(得分:1)

这听起来像是正则表达式的工作

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "55555>>><<[1234]<>>>788";

            Regex r = new Regex(@"\[(\d*)\]");
            Match match = r.Match(str);
            Console.WriteLine(match.Groups[1].Value);
        }
    }
}

上面的代码有以下输出

1234
Press any key to continue . . .

答案 2 :(得分:0)

这是一个正则表达式,可以解决这个问题:

Console.WriteLine (Regex.Match("55555>>><<[1234]<>>>788", @"(?:\[)(?<Data>[^\]]+)(?:\])").Groups["Data"].Value);
// 1234 is outputed

答案 3 :(得分:0)

以下内容应该足够了:

var match = Regex.Match("55555>>><<[1234]<>>>788", ".*\[(.+)\].*");

var value = match.Groups[1].Value; //= "1234"

如果值应始终为数字,则可以将(.+)替换为(\d+),与其他答案一样。

.+表示任何字符
\d表示0到9之间的任何数字。