我试图从所有三种类型的输入中获取一些文本,但无法弄清楚如何处理未引用的情况。
到目前为止,我有:
name=['"](.*?)['"]
输入:
name="sometext"
name='sometext'
name=sometext
答案 0 :(得分:4)
看起来您是C#开发人员,因此您可以使用第一个匹配组来确保使用相同的引号关闭它(从而支持phrase="Don't forget apostrophes"
)。
Regex regex1 = new Regex(@"=(?:(['""])(.*?)\1|.*)");
string text = @"
name=""don't forget me""
name='sometext'
name='sometext'
name=sometext
";
foreach (Match m in regex1.Matches(text))
Console.WriteLine (m.Groups[2].Value);
答案 1 :(得分:1)
我会使用OR运算符|
分别指定三种情况:
('[^'"]*')|("[^'"]*")|([^'"]*)
根据您使用的正则表达式方言,您必须定义由OR运算符分隔的非匹配组,以及单词[^'"]*
的匹配组。
答案 2 :(得分:0)
在不知道'name = asdf'之后可能是什么之后,假设它的空格或什么都没有 划定结束。
name=
(?:
(['"])((?:(?!\1).)*)\1 # (1,2)
| (\S*) # (3)
)
答案是2美元,3美元