使用包含多个特殊字符的char[]的if-else语句C#
我正在尝试使用char[]构建if-else语句对于特殊字符…如果TextBox1包含所有字符,我希望运行If语句…如果没有,则执行else语句…当我使用多个特殊字符时,运行If语句遇到问题…非常感谢任何帮助…请参阅以下示例: 当使用一个特殊字符(char[]chars={'^'};)时,下面的代码将运行 输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?% C# 但是…当我添加多个特殊字符(char[]chars={'^'、'$'、'='、'%'、';'、'?'};)时,我的代码将无法运行 输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?% C#使用包含多个特殊字符的char[]的if-else语句C#,c#,if-statement,char,C#,If Statement,Char,我正在尝试使用char[]构建if-else语句对于特殊字符…如果TextBox1包含所有字符,我希望运行If语句…如果没有,则执行else语句…当我使用多个特殊字符时,运行If语句遇到问题…非常感谢任何帮助…请参阅以下示例: 当使用一个特殊字符(char[]chars={'^'};)时,下面的代码将运行 输入TextBox1的文本是: %TXSMITH^SMITH$JOHN^1411主圈^;95651501425264=160919780101?% C# 但是…当我添加多个特殊字符(char[
您可以使用一点Linq,例如:
if (characters.All(c => TextBox1.Text.Contains(c.ToString()))
{
...
}
但最好重构代码,以便明智地使用正则表达式
下面是一个使用正则表达式的示例:
string s = "%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^? ;95651501425264=160919780101?%";
string pattern = @"^%.*?\^(?<ln>.*?)\$(?<fn>.+?)\^(?<addr>.+?)\^.*=\d{4}(?<dob>\d+)\?%$";
var match = Regex.Match(s, pattern);
if (match.Success)
{
string categories =
String.Join(" ",
match.Groups["fn"],
match.Groups["ln"],
match.Groups["addr"],
match.Groups["dob"])
+ Environment.NewLine;
// categories == "JOHN SMITH 1411 MAIN CIRCLE 19780101"
}
string s=“%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^;95651501425264=160919780101%”;
字符串模式=@“^%.*?\ ^(?.*?\$(?。+?)\ ^(?。+?)\ ^.*=\d{4}(?\d+)\?%$”;
var match=Regex.match(s,pattern);
如果(匹配成功)
{
字符串类别=
String.Join(“”,
匹配.组[“fn”],
匹配.组[“ln”],
match.Groups[“addr”],
匹配。组[“dob”])
+环境新线;
//类别==“约翰·史密斯1411主圈19780101”
}
您可以使用一点Linq,例如:
if (characters.All(c => TextBox1.Text.Contains(c.ToString()))
{
...
}
但最好重构代码,以便明智地使用正则表达式
下面是一个使用正则表达式的示例:
string s = "%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^? ;95651501425264=160919780101?%";
string pattern = @"^%.*?\^(?<ln>.*?)\$(?<fn>.+?)\^(?<addr>.+?)\^.*=\d{4}(?<dob>\d+)\?%$";
var match = Regex.Match(s, pattern);
if (match.Success)
{
string categories =
String.Join(" ",
match.Groups["fn"],
match.Groups["ln"],
match.Groups["addr"],
match.Groups["dob"])
+ Environment.NewLine;
// categories == "JOHN SMITH 1411 MAIN CIRCLE 19780101"
}
string s=“%TXSMITH^SMITH$JOHN^1411 MAIN CIRCLE^;95651501425264=160919780101%”;
字符串模式=@“^%.*?\ ^(?.*?\$(?。+?)\ ^(?。+?)\ ^.*=\d{4}(?\d+)\?%$”;
var match=Regex.match(s,pattern);
如果(匹配成功)
{
字符串类别=
String.Join(“”,
匹配.组[“fn”],
匹配.组[“ln”],
match.Groups[“addr”],
匹配。组[“dob”])
+环境新线;
//类别==“约翰·史密斯1411主圈19780101”
}
我想你可以这样检查:
bool ContainsAllChars = true;
foreach (char NextChar in chars)
if (TextBox1.Text.IndexOf(NextChar) == -1)
{
ContainsAllChars = false;
break;
}
if (ContainsAllChars)
...
我不认为您可以在这里使用IndexOfAny,因为它查找任何数组字符的出现情况,并且仅当它们都不存在时才返回-1。我认为您可以通过以下方式进行检查:
bool ContainsAllChars = true;
foreach (char NextChar in chars)
if (TextBox1.Text.IndexOf(NextChar) == -1)
{
ContainsAllChars = false;
break;
}
if (ContainsAllChars)
...
我不认为您可以在这里使用IndexOfAny,因为它查找任何数组字符的出现情况,并且仅当它们都不存在时才返回-1。字符串.Contains()方法仅当存在精确匹配时才返回true
要检查给定集合中的每个字符是否至少出现一个字符串,必须逐个检查它们,例如,使用string.IndexOf(…)
方法。只有当存在精确的匹配时,string.Contains()
方法才会返回true
要检查给定集合中的每个字符是否至少出现一个字符串,必须逐个检查它们,例如使用
string.IndexOf(…)
方法。此正则表达式将匹配您的模式
public bool IsTheStringIWant(string s)
{
Regex regex = new Regex("%.*\\^.*\\$.*\\^.*\\^\\?.*;.*=.*\\?%");
return regex.IsMatch(s);
}
此正则表达式将匹配您的模式
public bool IsTheStringIWant(string s)
{
Regex regex = new Regex("%.*\\^.*\\$.*\\^.*\\^\\?.*;.*=.*\\?%");
return regex.IsMatch(s);
}
最简单的方法是使用正则表达式。如果其他字符集中都存在,则需要循环使用其中一组字符,并将标志设置为true。@Moo Juice这看起来像EDI/HL7:)或某种形式的刷卡数据。信用卡看起来非常相似。最简单的方法是使用正则表达式。如果其他字符集中都存在,则需要循环使用其中一组字符,并将标志设置为true。@Moo Juice这看起来像EDI/HL7:)或某种形式的刷卡数据。信用卡看起来非常相似。OP的问题不清楚,但在第一个
?
和之间有一个换行符
您需要使用RegexOptions.Singleline
来匹配它。但这正是我要发布的内容。@Bobson对我来说,它看起来像一个空间。如果你查一下systax的降价情况,这一切都在一条线上。嗯,说得好。这可能取决于读卡器是否解释为换行符或空格,但他肯定使用了空格。OP的问题不清楚,但在第一个?
和之间有一个换行符
您需要使用RegexOptions.Singleline
来匹配它。但这正是我要发布的内容。@Bobson对我来说,它看起来像一个空间。如果你查一下systax的降价情况,这一切都在一条线上。嗯,说得好。这可能取决于读卡器是否将其解释为换行符或空格,但他肯定使用了空格。