Эта часть ваших выражений [^2]
- это класс символов с отрицанием, который соответствует любому символу, кроме 2
Если вы хотите сопоставить его буквально за пределами класса символов, вы должны экранировать его \^
, иначе его значение будет якорем для подтверждения начала строки.
Использование \w
соответствует символу слова, а также может совпадать с цифрами и подчеркиванием. Если вы хотите сопоставить a-z, вы можете добавить это в класс символов. Обратите внимание, что вы можете опустить {1}
.
Вы можете использовать необязательную группу (?:)?
для первой части:
(?:[+-]?\d+(?:\.\d+)?[a-z]\^2 [+-] )?\d+(?:\.\d+)?[a-z] [+-] \d+(?:\.\d+)? = 0
Это будет соответствовать:
(?:
Группа без захвата
[+-]?
Дополнительно + или -
\d+(?:\.\d+)?
Совпадение 1+ цифр с необязательной десятичной частью
[a-z]\^2 [+-]
Соответствует символу a-z, затем ^2
пробел необязательно + или - и пробел
)?
Закрыть группу без захвата и сделать ее необязательной
\d+(?:\.\d+)?[a-z] [+-]
Совпадение цифр 1+ с необязательной десятичной частью, char a-z, пробел, необязательный + или - и пробел
\d+(?:\.\d+)? = 0
Совпадение цифр 1+ с необязательной десятичной частью, пробел = пробел 0
Например
String pattern = @"(?:[+-]?\d+(?:\.\d+)?[a-z]\^2 [+-] )?\d+(?:\.\d+)?[a-z] [+-] \d+(?:\.\d+)? = 0";
Regex demo | C # демо
На основании комментария dotNET , если переменная должна быть такой же, вы можете использовать группу захвата с обратной ссылкой \1
. Чтобы соответствовать обоим форматам, вы можете использовать чередование и привязки, чтобы утверждать начало и конец строки.
Regex demo