2

我有一个这样的字符串 -"[A]16 and 5th and A[20] and 15"

我需要取值[A]16, 5, A[20], 15. (数字和 [A],如果存在的话)

我正在使用 C#。

 string[] numbers = Regex.Split("[A]16 and 5th and [A]20 and 15", @"\D+");

下面的代码只会给我数字。但我还需要 [A] 数字字体(如果存在)。

拜托,你能帮帮我吗?

4

4 回答 4

1

更通用的模式可能是:

@"\[[A-Z]][0-9]+|[A-Z]\[[0-9]+]|[0-9]+"



[[A-Z]][0-9]       - matches [Letter from A-Z]Number          example: [A]10
or |[A-Z]\[[0-9]+] - matches Letter from A-Z[Number]          example: A[10]
or |[0-9]+         - matches Numers from 1-N                  example: 5, or 15
于 2012-04-26T08:04:36.247 回答
0

使用这种模式:@"(\[A\])?\d+"如果只有[A]s。
如果你也有[B], [C]...你可以使用这个模式:@"(\[[A-Z]\])?\d+"

于 2012-04-26T07:58:12.853 回答
0

您可以使用此模式:

string lordcheeto = @".*?(\[A\]\d+|\d+|A\[\d+\]).*?";

它还会从您想要的匹配项中删除垃圾。虽然,由于工作方式Split,数组中会有空字符串。至于看似必要的一般情况,您可以使用:

string lordcheeto = @".*?(\[[A-Z]\]\d+|\d+|[A-Z]\[\d+\]).*?";

代码

using System;
using System.Text.RegularExpressions;

namespace RegExIssues
{
    class Program
    {
        static void Main(string[] args)
        {
            // Properly escaped to capture matches.
            string lordcheeto = @".*?(\[A\]\d+|\d+|A\[\d+\]).*?";
            string input = "[A]16 and 5th and A[20] and 15";

            executePattern("lordcheeto's", input, lordcheeto);

            Console.ReadLine();
        }

        static void executePattern(string version, string input, string pattern)
        {
            // Avoiding repitition for this example.
            Console.WriteLine("Using {0} pattern:", version);

            // Needs to be trimmed.
            var result = Regex.Split(input.Trim(), pattern);

            // Pipe included to highlight empty strings.
            foreach (var m in result)
                Console.WriteLine("|{0}", m);

            // Extra space.
            Console.WriteLine();
            Console.WriteLine();
        }
    }
}

测试

http://goo.gl/VNqpp

输出

Using lordcheeto's pattern:
|
|[A]16
|
|5
|
|A[20]
|
|15
|

注释

如果您需要更多内容或者这与其他字符串中断,请告诉我,我可能会对其进行修改。

于 2012-04-26T09:05:53.377 回答
0

尝试这个 :

(\[[A-Z]\][0-9]+)|([A-Z]\[[0-9]+\])|([0-9]+)

演示:

http://regexr.com?30p8v

于 2012-04-26T09:12:38.090 回答