C # Regex Алфавитно-цифровая строка - PullRequest
0 голосов
/ 29 января 2019

Я хотел бы проверить, содержит ли строка следующие группы.Все строки ДОЛЖНЫ содержать ровно 2 ##

String 1)

##Some_Foo_Text_1##

=> Ожидаемый результат: строка содержит 1 действительную группу

Строка 2)

##Some_Foo_Text_2#E+1##

=> Ожидаемый результат: Строка содержит 1 Действительную группу

Строка 3)

##Some_Foo_Text_3#e-1##

=> Ожидаемый результат: строка содержит 1 действительную группу

строка 4)

##Some_Foo_Text_4##E+1##

=> Ожидаемый результат: строка содержит 1 допустимую группу(## Some_Foo_Text_4 ##) и 1 недопустимая группа (E + 1 ##), недопустимая группа отбрасывается

Теперь я нашел это регулярное выражение

/([A-Za-z\+\-0-9])+/g

Согласно Regexr это не соответствует моей строке.Не могли бы вы помочь мне позаботиться о ## в начале и конце?

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Это регулярное выражение будет работать для всех опубликованных строк (?<=##)([A-Za-z0-9_])*(?=#), вот пример https://regexr.com/47aml

Хотя, если он многострочный, вам нужно включить многострочную опцию для получения правильных результатов.

0 голосов
/ 29 января 2019

Попробуйте это регулярное выражение

^##(?<content>.+?)##(?!#)

Объяснение:

^           // begin of the line
##          // match literaly
(           // to capture group
?<content>  // with name content
.           // any char
+?          // as few times as possible
##          // match literlly
(?!         // assert that 
#           // this regex will not match
)           // end of negative lookahead

Пример:

var regex = new Regex("^##(?<content>.+?)##(?!#)");
var input = new[]
{
    "##Some_Foo_Text_21##",
    "##Some_Foo_Text_2#E+1##",
    "##Some_Foo_Text_3#e-1##",
    "##Some_Foo_Text_4##E+1##",
};

foreach (var line in input)
    Console.WriteLine(regex.Match(line).Groups["content"].Value);

Вывод

Some_Foo_Text_21

Some_Foo_Text_2 # E + 1

Some_Foo_Text_3 # e-1

Some_Foo_Text_4

0 голосов
/ 29 января 2019

Следующее регулярное выражение будет сопоставлять все между двумя вхождениями "##";

(##.*?##)

В вашем последнем примере строка ##Some_Foo_Text_4## становится совпадением, но не E+1##.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...