Регулярное выражение для удаления одного ведущего «1», с добавлением большего количества регулярных выражений после удаления одного

#regex

#регулярное выражение

Вопрос:

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

 [A-Z0-9]{6,8}
  

Это принимает любые строки, содержащие 6, 7 или 8 символов, которые являются заглавными буквами от А доЯ или цифрами 0-9.

Я хотел бы добавить что-нибудь в начале, чтобы удалить единственное ведущее 1 . Например:

оригинал 1ABC123
создать ABC123 (удалить ведущую букву «1»)

оригинал 111ABCDE
создать 11ABCDE (удалить только одну букву «1»)

оригинал ABC1234
новое ABC1234 (без изменений)

оригинал 9876543
новое 9876543 (без изменений)

Пожалуйста, имейте в виду, что я должен сохранить [A-Z0-9]{6,8} часть после удаления ведущего 1, если таковой имеется.

Я использую boost::regex_match в C для фактической обработки регулярного выражения, если это имеет значение.

вкратце, сайт, который я использую для проверки этого,https://regex101.com что немного неудобно, у кого-нибудь есть альтернативные предложения для сайта проверки регулярных выражений?

Комментарии:

1. Я думаю, вам нужно использовать boost::regex_replace для этого шаблон поиска с ^1(.*?[A-Z0-9]{6,8}) или ^1([A-Z0-9]{6,8}) и $1 в качестве шаблона замены. Смотрите демонстрацию .

2. «^1{1}» должно содержать единственное ведущее 1. Или также «^ 1?» Может соответствовать вашим потребностям

3. Кроме того, почему regex101 «неудобный»? Это лучший сайт для проверки регулярных выражений, с которым я когда-либо сталкивался.

4. На данный момент все еще работаю над этим. Я ценю все хорошие предложения. Я приму ответ, когда все будет завершено.

5. Пожалуйста, поясните, что вы делаете, иначе нет смысла принимать какие-либо ответы, поскольку они могут вам не помочь, особенно когда вы не предоставляете обратную связь.

Ответ №1:

Вы можете использовать необязательный символ соответствия ? , чтобы проверить наличие 1 в начале регулярного выражения:

 1?[A-Z][0-9]{6,8}
  

Хотя, теперь это позволяет номерным знакам иметь длину до 9 символов. Если это нормально, вы можете затем добавить необязательную 1 в группу без захвата, чтобы удалить ее из результирующих сопоставленных групп с помощью шаблона (?:blah) :

 (?:1?)[A-Z0-9]{6,8}
  

Если вы не можете использовать до 9 символов в номерном знаке, тогда просто используйте два регулярных выражения, одно с необязательным 1 и одно без. Используйте символ канала | как логическое «или», чтобы соответствовать любому выражению:

 1[A-Z0-9]{5,7}|[A-Z0-9]{6,8}
  

И снова, если вам нужно игнорировать 1 в выходных данных, поместите его в группу без захвата:

 (?:1)[A-Z0-9]{5,7}|[A-Z0-9]{6,8}