正则表达式:C#在双引号内提取文本

时间:2012-10-23 05:25:34

标签: c# regex

我想只提取双引号中的那些单词。所以,如果内容是:

  

您是否愿意回复通过电子邮件发送给您的“问题”?

答案必须是

  1. 问题

7 个答案:

答案 0 :(得分:53)

试试这个regex

\"[^\"]*\"

\".*?\"

解释:

  

[^ character_group ]

     

否定:匹配不在character_group中的任何单个字符。

     

*?

     

匹配前一个元素零次或多次,但尽可能少。

和示例代码:

foreach(Match match in Regex.Matches(inputString, "\"([^\"]*)\""))
    Console.WriteLine(match.ToString());

//or in LINQ
var result = from Match match in Regex.Matches(line, "\"([^\"]*)\"") 
             select match.ToString();

答案 1 :(得分:13)

基于@Ria的回答:

static void Main(string[] args)
{
    string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
    var reg = new Regex("\".*?\"");
    var matches = reg.Matches(str);
    foreach (var item in matches)
    {
        Console.WriteLine(item.ToString());
    }
}

输出结果为:

"you"
"questions"

如果不需要,可以使用string.TrimStart()和string.TrimEnd()删除双引号。

答案 2 :(得分:8)

我喜欢正则表达式解决方案。你也可以想到这样的事情

string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
var stringArray = str.Split('"');

然后从数组中取出odd个元素。如果你使用linq,你可以这样做:

var stringArray = str.Split('"').Where((item, index) => index % 2 != 0);

答案 3 :(得分:2)

这也从@Ria窃取了正则表达式,但允许你将它们放入一个数组中,然后删除引号:

strText = "Would \"you\" like to have responses to your \"questions\" sent to you via email?";
MatchCollection mc = Regex.Matches(strText, "\"([^\"]*)\"");
for (int z=0; z < mc.Count; z++)
{
    Response.Write(mc[z].ToString().Replace("\"", ""));
}

答案 4 :(得分:1)

试试这个(\"\w+\")+

我建议您下载Expresso

http://www.ultrapico.com/Expresso.htm

答案 5 :(得分:0)

我需要在C#中执行此操作来解析CSV并且这些都不适合我,所以我想出了这个:

\s*(?:(?:(['"])(?<value>(?:\\\1|[^\1])*?)\1)|(?<value>[^'",]+?))\s*(?:,|$)

这将解析带或不带引号的字段,并在保留嵌入式引号和逗号的同时从值中排除引号。 <value>包含已解析的字段值。如果不使用命名组,则组2或3包含值。

有更好更有效的方法来进行CSV解析,而这种方法在识别错误​​输入时无效。但是,如果您可以确定您的输入格式并且性能不是问题,那么这可能对您有用。

答案 6 :(得分:0)

我将Regex和Trim结合在一起:

set.seed(2018)
df1 <- data.frame(
    COUNTYCD = c("46013", "46013", "46013", "46013"),
    val_from_df1 = runif(4))
df2 <- data.frame(
    COUNTYCD = c(" \"01001\" ", " \"01003\" ", " \"01005\" ", " \"01007\" ", " \"46013\" "),
    val_from_df2 = runif(5))

结果:

const string searchString = "This is a \"search text\" and \"another text\" and not \"this text";
var collection = Regex.Matches(searchString, "\\\"(.*?)\\\"");
foreach (var item in collection)
{
    Console.WriteLine(item.ToString().Trim('"'));
}