C# 从C中的字符串中获取像@*@这样的所有单词的最佳方法#
我有一个类似于“@1234@==val1&&@2312@!=val2”的字符串。我想得到1234和2312,它们是使用“@”嵌入到数组中的。字符串可以包含多个使用“@”嵌入的项 更新:将只包含介于“@”之间的整数值C# 从C中的字符串中获取像@*@这样的所有单词的最佳方法#,c#,.net,regex,string,linq,C#,.net,Regex,String,Linq,我有一个类似于“@1234@==val1&&@2312@!=val2”的字符串。我想得到1234和2312,它们是使用“@”嵌入到数组中的。字符串可以包含多个使用“@”嵌入的项 更新:将只包含介于“@”之间的整数值 update2:可能出现的有效输入字符串是“@some int value@==val1”或类似类型的字符串,用“&&&”或“||”分隔 输入字符串示例: "@234@ == val1", "@3456@ == 345 &
update2:可能出现的有效输入字符串是“@some int value@==val1”或类似类型的字符串,用“&&&”或“||”分隔 输入字符串示例:
"@234@ == val1",
"@3456@ == 345 && @34563@ != 'Y'",
"@1234@ != val1 || @1234@ != val2 || @1234@ != val3"
实现这一点的最佳方法是什么?尝试:(包括签名的值)
//字符串patt=“@(?.*?”@”;
//字符串patt=“@(?\\d*?)@”//仅使用数字值(如果应该是整数,则使用+而不是*)
//字符串patt=“@(?[+|-]?\\d*?)@”;
//string str=“@1234@==val1&&&@-2312@!=val2&&@+23@!=val3”;
字符串patt=“@(?[+\124;-]?\\ d+?)@\\s[====!=].*(&&&&&\\\\\\\\\\\\\\\$){1}”;
string str=“@1234@==val1&&-2312@!=val2&&&+78@!=val3||45@==446”;
正则表达式r=新正则表达式(patt);
string str=“@1234@==val1&&@2312@!=val2”;
MatchCollection mc=r.Matches(str);
List lst=新列表();
foreach(匹配mc中的项目)
{
字符串值=项。组[“值”]。值;
一、增加(价值);
}
使用LINQ的另一种方法:
var list = input.Split(new[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
var result = Enumerable.Range(0, list.Length / 2)
.Select(i => list.ElementAt(i*2));
如果您的输入像:
"@12@@34@ == val1 && @2312@ != val2"
您可以在下面使用Linq:
var list = input.Split(new[] { "==", "!=", "&&", "||" },
StringSplitOptions.RemoveEmptyEntries);
var result = Enumerable.Range(0, list.Length/2)
.Select(i => list.ElementAt(i*2).Trim())
.Select(s => s.Substring(1, s.Length - 2));
List l=新列表();
字符串s=“@1@==val1&&@2@!=val2|124;@3@==val1”;
Regex r=新的Regex(@)(?正则表达式您应该使用:
(?<=@)[0-9]+(?=@)
(?使用正则表达式。它是什么意思“类似类型的字符串以“&&”或“| |”分隔?”?@CuongLe通过添加示例更新了问题inputs@Jom:随着您的更新,我删除了第二个Linq,第一个是正确的。@jom这3个是唯一正确的有效输入!您应该添加.ToList()在结果的结尾。在我的问题中,相邻的@将不存在。那么这工作正常吗?可能出现的有效输入字符串是“@some int value@==val1”或类似类型的字符串,用“&&”或“| |”分隔
List<int> l=new List<int>();
string s="@1@ == val1 && @2@ != val2 || @3@ == val1";
Regex r=new Regex(@"(?<=@)[\d\s]+(?=@\s(==|!=).*?(&&|\|\||$){1})");
foreach(Match m in r.Matches(s))
{
l.AddRange(Regex.Split(m.Value,@"(?=\d)").Where(i=>i!="").Select(i=>int.Parse(i.Replace(" ",""))).ToList());
}
(?<=@)[0-9]+(?=@)