На ваш вопрос "Как я могу удалить точки в процессе сопоставления?" Ответ: «Вы не можете». Единственный способ сделать это - обработать результат матча на втором шаге, как говорили другие. Но я думаю, что есть более простой вопрос, который необходимо решить, а именно: «Что это значит, что регулярное выражение соответствует заданному входу?»
Регулярное выражение обычно считается совпадающим со строкой, когда оно описывает любую подстроку этой строки. Если вы хотите быть уверены, что регулярное выражение описывает всю строку, вам нужно добавить начальный (^
) и конечный ($
) якоря:
/^.*x(\d+)\.(.*?)\.[A-Z]{3}.*$/
Но в вашем случае вам не нужно описывать всю строку; если вы избавитесь от .*
на обоих концах, это также подойдет вам:
/x(\d+)\.(.*?)\.[A-Z]{3}/
Я рекомендую вам не привыкать к "регулярным выражениям" регулярных выражений с .*
в начале и в конце. В частности, ведущий .*
может неожиданно изменить поведение регулярного выражения. Например, если во входной строке есть два места, в которых может совпадать x(\d+)\.
, ваше "настоящее" совпадение начнется со второго. Кроме того, если он не связан с ^
или \A
, ведущий .*
может сделать все регулярное выражение гораздо менее эффективным.
Я сказал «обычно» выше, потому что некоторые инструменты автоматически «привязывают» совпадение в начале (match()
в Python) или на обоих концах (matches()
в Java), но это довольно редко. Большинство оболочек и инструментов командной строки, доступных в * nix-системах, определяют соответствие регулярному выражению традиционным способом, но на всякий случай стоит сказать, какие инструменты вы используете.
Наконец, пару слов о словаре. Скобки в (\d+)
означают, что соответствующие символы записываются , а не сгруппированы . Многие разновидности регулярных выражений также поддерживают не захватывающие скобки в форме (?:\d+)
, которые используются только для группировки . Говорят, что любой текст, включенный в общее совпадение, независимо от того, захвачен он или нет, был использован (не захвачен ). То, как вы использовали слова «захват» и «группа» в своем вопросе, гарантированно вызовет максимальную путаницу у любого, кто предполагает, что вы знаете, о чем говорите. : D
Если вы еще не читали его, ознакомьтесь с этим превосходным учебником .