suman palla Ответов: 2

Формат регулярных выражений для XXXXXXXXX , XX-XXXXXXX , XXX-XX-XXXX ex (123456789, 123-12-1234, 12-134567))


Всем Привет,

Не могли бы вы предоставить регулярное выражение для приведенного ниже.

В приложении пользователь предоставит описание, Если описание содержит SSN или EIN ('049-90-1935',149901935,14-9901935), следует заменить на "xxxxxxxx".

Ниже приведены допустимые форматы для замены.
049-90-1935
ANR049-90-1935
049-90-1935BIH
049901935
14-9901935BIN


Недопустимый формат:
0141234567897 недействителен. Не следует заменять. Последовательность длиннее 9 цифр.
0141234 недействительно. Не следует заменять. Эта последовательность короче 9 цифр.
123456789abc123456789 недействительным



(1)The data consists of 9 digits only.
(2)The data is delimited by either a SPACE or non-digit character.
(3)Embedded space(s) separating digits should be ignored.
(4)For SSNs, the acceptable formats are 
a.xxx-xx-xxxx or
b.xxxxxxxxx where x represents a digit (number from 0 thru 9)
(5)For EINs, the acceptable formats are
a.xx-xxxxxxx or
b.xxxxxxxxx  where x represents a digit (number from 0 thru 9)


Что я уже пробовал:

I tried with the following regular expression.

<pre>string ssnPattern = @"[^0-9](?<grpA>\d{9}) |[^0-9](?<grpB>\d{3}-\d{2}-\d{4}) | [^0-9](?<grpC>\d{2}-\d{7}) ";

                    var matches = Regex.Matches(description, ssnPattern).Cast<Match>().Select(m => m).ToList();
                    if (matches != null && matches.Count > 0)
                    {
                        redactionText = Regex.Replace(content, ssnPattern, m =>
                        {
                            string val = "";
                            if (m.Groups["grpA"] != null && m.Groups["grpA"].Value != "")
                            {
                                val = m.Value.Replace(m.Groups["grpA"].Value, req.ReplacementText);
                                matchingItems.Add(m.Groups["grpA"].Value);
                            }
                            if (m.Groups["grpB"] != null && m.Groups["grpB"].Value != "")
                            {
                                val = m.Value.Replace(m.Groups["grpB"].Value, req.ReplacementText);
                                matchingItems.Add(m.Groups["grpB"].Value);
                            }
                            if (m.Groups["grpC"] != null && m.Groups["grpC"].Value != "")
                            {
                                val = m.Value.Replace(m.Groups["grpC"].Value, req.ReplacementText);
                                matchingItems.Add(m.Groups["grpC"].Value);
                            }

                            return val;
                        });
                    }



Unable to resolve all the scenarios. Can anyone please provide a solution.

2 Ответов

Рейтинг:
2

Richard MacCutchan

(2)The data is delimited by either a SPACE or non-digit character.
(3)Embedded space(s) separating digits should be ignored.

Итак, как бы вы решили что-то вроде "0499019 35"?


suman palla

Не следует заменять. Эта последовательность короче 9 цифр.

Richard MacCutchan

Правило 3 гласит: "игнорировать встроенные пробелы между цифрами". Итак, как вы определяете разницу между встроенным пространством и концом строки?

suman palla

Данные разделяются либо пробелом, либо нецифровым символом.

Richard MacCutchan

Встроенные пробелы, разделяющие цифры, следует игнорировать.
Итак, как вы определяете, является ли это концом строки или встроенным пространством?

suman palla

Вход: "123 Street123456789, 123 Street12-1234567, 123 Stree123-12-1234 123456789Abc abc1234567989 abc123456789abc"

Выход: улица 123[заменен], улица 123[заменен], 123 Стр[заменить] [заменен]АБВ АБВ[заменен] abc123456789abc

Рейтинг:
1

Patrice T

Цитата:
(2)данные разделяются либо пробелом, либо нецифровым символом.

У вас есть проблема, что ваши примеры не следуют правилу 2.
Цитата:
(3)встроенные пробелы, разделяющие цифры, следует игнорировать.

Это правило действительно усложнит использование регулярных выражений.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]