0

给定一个字符串,我想检索一个引号之间的字符串,并且完全大写。

例如,如果一个字符串

oqr"awr"q q"ASRQ" asd "qIKQWIR"

已输入,正则表达式只会将“ASRQ”评估为匹配字符串。

解决这个问题的最佳方法是什么?

编辑:忘了提到字符串也需要一个数字输入 IE:“IO8917AS”是一个有效的输入

4

3 回答 3

3

编辑:如果您实际上想要“一个或多个字符,并且没有一个字符是小写字母”,那么您可能想要:

Regex regex = new Regex("\"\\P{Ll}+\"");

这也将允许数字......和标点符号。如果你想允许数字和大写字母但没有别的,你可以使用:

Regex regex = new Regex("\"[\\p{Lu}\\d]+\"");

或以逐字字符串文字形式(使引号更加混乱,但反斜杠则更少):

Regex regex = new Regex(@"""[\p{Lu}\d]+""");

原始答案(在需要数字之前)

听起来你只是想要(在模式内)

 "[A-Z]*"

所以像:

Regex regex = new Regex("\"[A-Z]*\"");

或者要获得完整的 Unicode 支持,请使用LuUnicode 字符类别:

Regex regex = new Regex("\"\\p{Lu}*\"");

编辑:如前所述,如果您不想匹配引号中的字符串(仍然是“所有内容均为大写的字符串”),则使用+代替*,例如

Regex regex = new Regex("\"\\p{Lu}+\");

查找和显示第一个匹配项的简短但完整的示例:

using System;
using System.Text.RegularExpressions;

class Program
{    
    public static void Main()
    {
        Regex regex = new Regex("\"\\p{Lu}+\"");
        string text = "oqr\"awr\"q q\"ASRQ\" asd \"qIKQWIR\"";

        Match match = regex.Match(text);
        Console.WriteLine(match.Success); // True
        Console.WriteLine(match.Value);   // "ASRQ"
    }    
}
于 2012-06-20T05:58:33.550 回答
0

像这样:"\"[AZ]+\""

最外面的引号不是正则表达式的一部分,它们分隔 C# 字符串。

这要求引号之间至少有一个大写字符,并且适用于英语。

于 2012-06-20T06:03:12.427 回答
0

请尝试以下方法:

[\w]*"([A-Z0-9]+)"

于 2012-06-20T06:08:48.530 回答