Выражение регулярного выражения Я хочу захватить две буквы "SF" и только "F" - PullRequest
4 голосов
/ 09 июля 2019

Здравствуйте, друзья в StackOverflow

У меня есть следующее [^ &] _ \ s (SF) * \ d {8} регулярное выражение

Я пытаюсьдля сопоставления 8 цифр со словом SF или SF_

, например, в приведенных ниже примерах

1) _zz & 69050398_5d147597dd4aca00014351d9_zz sf 76064603RPL_Import_Create

2) 1014 686 638 638 638 688 686 686 686 686 686 686 686 686 686 686 686 686 686 686 638 686 686 638 686 686 638 686 686 686 686 686 686 686 687 638 637 638 668 6696* S из SF не выделяется при тестировании.и 8 цифр, прежде чем будет выделено третье «_».и мне нужно избегать этого.

вы можете увидеть это здесь https://regex101.com/r/P0P238/1/

как мне найти соответствие для всего "SF"?

[^&]_*\s*(SF)*\d{8}

1 Ответ

2 голосов
/ 09 июля 2019

В вашем паттерне [^&]_*\s*(SF)*\d{8} вы не соответствует амперсанду [^&], 0+ раз _, 0+ раз символ пробела и захватываете в повторяющейся группе 0+ раз, соответствующей SF. Затем шаблон заканчивается сопоставлением 8 цифр.

Это означает, что существует множество «необязательных» частей, которые могут соответствовать 0+ раз.

Вы получаете совпадение, потому что [^&] может совпадать с F, тогда _*\s*(SF)* необязательно, но \s* может совпадать с пробелом, и тогда могут совпадать 8 цифр.

Вы можете обновить свой шаблон, удалив квантификатор из группы и сопоставив \s и _ в классе символов [\s_]

[^&][\s_](SF) \d{8}

Regex demo

Если вы просто хотите сопоставить 8 цифр с префиксом SF и пробелом, вы можете использовать регистр без учета регистра и использовать:

(sf) \d{8}

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...