2016-02-08 4 views
0

Я занимаюсь небольшим регулярным выражением, чтобы распознать комплексное число. Мне нужно это в школьной программе C#. я должен признать, комплексные числа, как: 3 + 5i 3 + 5k 4-i5 6 + f7regex match, но не включается в группу

Таким образом, мнимая часть может иметь любой символ вперед или значение. Я написал эту Regex:

(?<reale>[+-]?\d+)(?<immaginaria>[+-]\d+[a-zA-Z]|[+-][a-zA-Z]\d+) 

Проблема, когда я беру группу под названием «immaginaria» Я получил его с мнимой частью полукокса (как я или J), и я хотел бы получить его без .. я нашел решение с помощью упреждающих и Look-за, но, но у меня проблемы при попытке реализовать это в моем регулярном выражении (Это первое регулярное выражение я пишу)

(?<reale>[+-]?\d+)(?<immaginaria>[+-]\d+(?=[a-zA-Z])|[+-](?=[a-zA-Z])\d+) 
+0

Простой способ приятель заменить этот символ в результате immaginaria '[A-Za-Z]' с пустым полукокса '' – Enissay

+0

Да, это был легкий путь, и я сделал это, но я не сделал как выполнить дополнительную операцию в моем коде :) – RandomOverflow

ответ

0

Я изменил ваш первый попробуйте немного отделить знак и значение мнимой части, вы можете связать их позже после успешного матча:

(?<reale>[+-]?\d+)((?<immaginariasign>[+-])(?<immaginaria>\d+)[a-zA-Z]|(?<immaginariasign>[+-])[a-zA-Z](?<immaginaria>\d+)) 
+0

Это сработало, спасибо. Что мне делать, если я хотел бы сопоставить строку типа 3 (помещая 3 в действительную группу и оставляя пустую мнимую группу), 3j (помещая 3 в мнимую группу, оставляя пустую реальную группу)? , Поэтому я хотел бы соответствовать, если есть только мнимая часть или только настоящая часть. (Я буду проверять код C#, который существует или нет). Я ясно дал понять? – RandomOverflow

+0

@RandomOverflow добавить '?' В регулярное выражение. Это делает группу необязательной. –