3

我想提取输入短语中的所有双引号短语并将不匹配的元素保留为单词

假设我有“销售人员” IT 我希望输出是:

sales people

  IT

对于 input="SO \"sales manager\"marketing\"management\"" 也是一样的

输出是:

SO
sales manager
marketing
management

如果输入="SO\"销售经理\"营销管理\"保险"

输出是:

SO
sales manager
marketing
management
insurance

我找到了正则表达式:但我不知道如何提取:

string InputText="SO \"sales manager\" marketing \"management\"" ;
string pattern0 = "^\"(.*?)\"$";
string pattern = "^(.*?)\"(.*?)\"(.*?)$";
Regex regex = new Regex(pattern);
string[] temOperands;
bool isMatch = regex.IsMatch(InputText);
if (isMatch)
{
    //here goes the extraction
}
4

4 回答 4

4

我认为您需要类似"(?<word>[^"]+)"|(?<word>\w+). 这将匹配双引号和单个单词中的文本:

var str = @"SO ""sales manager"" marketing hello ""management""";
var regex = new Regex(@"""(?<word>[^""]+)""|(?<word>\w+)");
var words = regex.Matches(str)
    .Cast<Match>()
    .Select(m => m.Groups["word"].Value)
    .ToArray();

对于测试字符串,这将返回:

SO
sales manager
marketing
hello
management
于 2012-04-09T13:27:30.727 回答
0

输入字符串在双引号中只有两个单词“Sales manager”和“marketing”。下面的代码可以提取双引号内的字符串。

        ArrayList arr = new ArrayList();

        int x1 ;
        int nextPos=0;
        x1 = InputText.IndexOf('\"', 0) +1 ;
        while (x1 != -1)
        {
            if (x1 >= 0)
            { 
                nextPos = InputText.IndexOf('\"',x1);
                arr.Add(InputText.Substring(x1, nextPos - x1));
            }
            nextPos++;
            x1 = InputText.IndexOf('\"', nextPos) + 1;
        }
于 2012-04-09T13:26:15.950 回答
-1

您可以使用“替换”

string InputText="SO \"sales manager\" marketing \"management\"" ;
InputText=InputText.Replace("\"","\n");

在输出中你会得到你想要的。

于 2012-04-09T12:43:07.070 回答
-1

您还可以使用拆分功能

string s="SO \"sales manager\" marketing \"management\"";
string[] ExtractedString= Regex.Split(s, "\"");
于 2012-04-09T12:55:22.807 回答