给定一个字符串,我想检索一个引号之间的字符串,并且完全大写。
例如,如果一个字符串
oqr"awr"q q"ASRQ" asd "qIKQWIR"
已输入,正则表达式只会将“ASRQ”评估为匹配字符串。
解决这个问题的最佳方法是什么?
编辑:忘了提到字符串也需要一个数字输入 IE:“IO8917AS”是一个有效的输入
编辑:如果您实际上想要“一个或多个字符,并且没有一个字符是小写字母”,那么您可能想要:
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 支持,请使用Lu
Unicode 字符类别:
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"
}
}
像这样:"\"[AZ]+\""
最外面的引号不是正则表达式的一部分,它们分隔 C# 字符串。
这要求引号之间至少有一个大写字符,并且适用于英语。
请尝试以下方法:
[\w]*"([A-Z0-9]+)"