Соответствие строки - PullRequest
       6

Соответствие строки

2 голосов
/ 02 апреля 2010

Как сопоставить строку «Чистая сумма» (между Чистой и суммой может быть любое количество пробелов, включая ноль) с net amount?

Пробелы между этими двумя словами могут быть любыми пробелами, и точное совпадение двух строк должно быть. Но чистая сумма (первая строка с пробелами) может быть частью любой строки, например Rate Net Amount или Rate CommissionNet Amount.

Соответствие должно быть без учета регистра.

Ответы [ 4 ]

7 голосов
/ 02 апреля 2010

Используйте регулярные выражения. Взгляните на пространство имен System.Text.RegularExpressions, а именно класс Regex:

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

Строка аргумента - это то, что называется регулярным выражением pattern . Шаблоны регулярных выражений описывают, какие строки будут сопоставляться с ним. Они выражены со специализированным синтаксисом. Google для regular expressions, и вы должны найти много информации о регулярных выражениях.

Пример использования:

bool doesInputMatch = regex.IsMatch("nET      AmoUNT");
//                                  ^^^^^^^^^^^^^^^^^
//                                     test input
6 голосов
/ 02 апреля 2010

Если вы просто хотите проверить, существует ли совпадение, используйте 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);
    }
}
2 голосов
/ 02 апреля 2010

Вы можете использовать

Regex.IsMatch(SubjectString, @"net\s*amount", RegexOptions.Singleline | RegexOptions.IgnoreCase);
0 голосов
/ 02 апреля 2010

Вы можете использовать регулярное выражение: 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...