Как сделать часть регулярного выражения необязательной?

Это пример строки:

123456#p654321 

В настоящее время я использую этот матч для захвата 123456 и 654321 в две разные группы:

 ([0-9].*)#p([0-9].*) 

Но в некоторых #p654321 часть #p654321 строки не будет, поэтому я хочу только захватить первую группу. Я попытался сделать вторую группу «необязательной», добавив ? к ней, которая работает, но только до тех пор, пока в конце оставшейся строки будет #p.

Какой был бы лучший способ решить эту проблему?

У вас есть #p вне группы захвата, что делает ее необходимой частью результата. Вы также используете символ точки ( . ) Неправильно. Dot (в большинстве вариантов reg-ex) будет соответствовать любому персонажу. Измените его на:

 ([0-9]*)(?:#p([0-9]*))? 

Синтаксис (?:) – это то, как вы получаете группу без захвата. Затем мы записываем только цифры, которые вас интересуют. Наконец, мы делаем все это необязательным.

Кроме того, большинство вариантов reg-ex имеют class символов \d для цифр. Таким образом, вы можете упростить еще больше:

 (\d*)(?:#p(\d*))? 

Как отметил другой человек, оператор * потенциально может сопоставлять нулевые цифры. Чтобы предотвратить это, вместо этого используйте оператор + :

 (\d+)(?:#p(\d+))? 

Ваше регулярное выражение фактически не будет содержать цифр, потому что вы использовали * вместо + .
Это то, что (я думаю) вам нужно:

 (\d+)(?:#p(\d+))? 
  • regex, извлечь строку NOT между двумя скобками
  • Сопоставьте все, кроме указанных строк
  • Как проверить имя пользователя с регулярным выражением?
  • Как сопоставить числа между X и Y с регулярным выражением?
  • Regex соответствует URL-адресу
  • Регулярное выражение для повторения любого символа более 10 раз
  • Регулярное выражение для соответствия действительным датам
  • Regex для проверки формата даты dd / mm / yyyy
  • Javascript regex для проверки адреса IPv4 и IPv6, никаких имен хостов
  • Регулярное выражение для чисел с плавающей запятой
  • Получить окончательный специальный символ с регулярным выражением
  • Давайте будем гением компьютера.