我想只提取双引号中的那些单词。所以,如果内容是:
您是否愿意回复通过电子邮件发送给您的“问题”?
答案必须是
答案 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)
答案 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('"'));
}