2010-04-02 201 views
2

如何将字符串“网               金额”匹配(净和金额之间可以有任意数量的空格,包括零)与net amount?这两个词之间字符串匹配

空间可以是任何空白和两个串的精确匹配应该在那里。但净金额(第一个带空格的字符串)可以是任何字符串的一部分,如Rate Net AmountRate CommissionNet Amount.

匹配应该是不区分大小写。

+1

请更具体 – Andrey 2010-04-02 11:16:38

+0

你是什么意思“匹配”?你只是想检查一场比赛是否存在?你想要比赛的指数?你想用别的东西替换这个字符串吗? – 2010-04-02 11:18:15

+0

@Mark Byers,先生..我想检查一下匹配是否存在? – Harikrishna 2010-04-02 11:20:39

回答

6

如果你只是要检查是否存在匹配,使用IsMatch

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    public static void Main() 
    { 
     string s = "Net  Amount"; 
     bool isMatch = Regex.IsMatch(s, @"Net\s*Amount", 
            RegexOptions.IgnoreCase); 
     Console.WriteLine("isMatch: {0}", isMatch); 
    } 
} 

更新:在您的意见,它听起来就像你想要的字符串搜索只在运行时才知道。你可以尝试动态构建正则表达式,例如这样的事情:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    public static void Main() 
    { 
     string input = "Net  Amount"; 
     string needle = "Net Amount"; 

     string regex = Regex.Escape(needle).Replace(@"\ ", @"\s*"); 
     bool isMatch = Regex.IsMatch(input, regex, RegexOptions.IgnoreCase); 
     Console.WriteLine("isMatch: {0}", isMatch); 
    } 
} 
+0

@马克拜尔斯,非常感谢你先生....而我现在真的是你的粉丝。 – Harikrishna 2010-04-02 12:25:55

+0

@马克·拜尔斯先生,如果我们想匹配像买入卖出和买入卖出这样的字符串,那么我们该怎么做呢? – Harikrishna 2010-04-03 10:08:41

+1

@Harikrishna:对于这个问题,恕我直言,这太离谱了。你应该创建一个新的问题。请记住包括非常明确的规格,示例输入,示例输出。当你想要比赛成功,并且你希望比赛失败的时候,包括两个例子。试图首先自己解决问题,并将问题包含在问题中。显示你的代码失败的地方和方式的例子。 – 2010-04-03 10:58:01

0

您可以使用正则表达式:Net.*Amount

using System.Text.RegularExpressions; 
Regex regex = new Regex("Net.*Amount"); 
String s = "Net  Amount"; 
Match m = emailregex.Match(s); 

// Now you have information in m about the matching string. 
+0

@Anders Abel,它会匹配所有以Net开头的单词吗? – Harikrishna 2010-04-02 11:17:58

+0

是的,它会如果你使用。之前 *。点匹配任何字符,星号表示任何次数。如果您使用“Net + Amount”,则只有在单词之间至少有一个空格(并且没有其他字符)时才会匹配。 – 2010-04-02 11:20:22

6

使用正则表达式。看一看在System.Text.RegularExpressions命名空间,即Regex类:

var regex = new RegEx("net(\s+)amount", RegexOptions.IgnoreCase); 
//     ^^^^^^^^^^^^^^^ 
//      pattern 

参数字符串就是所谓的正则表达式模式。正则表达式模式描述了什么字符串会匹配它。它们用专门的语法表达。谷歌为regular expressions,你应该找到大量有关正则表达式的信息。

用例:

bool doesInputMatch = regex.IsMatch("nET  AmoUNT"); 
//         ^^^^^^^^^^^^^^^^^ 
//          test input 
+0

为什么downvote?我不介意,但我总是愿意让自己更好(或者至少是我的回答)。 – stakx 2010-04-02 12:12:59

+0

我提高了你的回答,因为在你发布它和附加信息时这是一个很好的建议。但是,这个问题已经被大量编辑和澄清,以至于你的答案不能被视为问题当前形式的正确答案。我可以想象,现在有人读到这个问题可能会因为这个原因而低估它。注意:我认为这不应该因为这个原因而被低估 - 我只是猜测为什么会这样。 – 2010-04-02 12:24:04

+0

@Mark Byers,谢谢你的提示! – stakx 2010-04-02 12:58:18

2

您可以使用

Regex.IsMatch(SubjectString, @"net\s*amount", RegexOptions.Singleline | RegexOptions.IgnoreCase); 
+1

+1考虑区分大小写。请注意,'RegexOptions.Singleline'在这里是不必要的 - 它只影响点'.',并且在正则表达式中没有点。 – 2010-04-02 12:22:31