Во-первых, вы должны избегать ^ в этом конкретном регулярном выражении. Как вы заметили, вы не можете вернуть более одного результата, так как «^» - это инструкция для «соответствовать началу строки»
Использование \ b может быть решением, но вы можете получить недопустимые результаты , Например,
305556710S or -100596269C OR CN111111111
Регулярное выражение "\\b[0-9]{1,10}[A-Z]{0,}\\b"
будет соответствовать 100596269 C (поскольку дефис не является символом слова, поэтому между словами - и 1 существует граница слова)
Следующее регулярное выражение в точности соответствует тому, что вы хотите: все числа, за которыми могут следовать некоторые символы sh Engli, либо в начале строки, либо после пробела, либо после пробела или в конце строки.
(?<=^| )[0-9]{1,10}[A-Z]*(?= |$)
Пояснения:
- (? <= ^ |) </strong> - вид сзади. Это гарантирует, что есть или ^ (начало строки) или пробел за фактическим местоположением. Обратите внимание, что взгляды не добавляют подходящие символы к результату: пробел не будет частью результата
- [0-9] {1,10} [AZ] * совпадений цифры (не менее одной, до десяти), затем одна или несколько букв.
- (? = | $) - это взгляд в будущее. Он гарантирует, что после этого совпадения будет либо пробел, либо $ (конец строки). Как и в случае с lookbehinds, символы не добавляются в результаты, а позиция остается прежней: например, прочитанное здесь пространство может также быть прочитано внешним видом следующей захваченной строки
Примеры: 305556710S or 100596269C OR CN111111111
соответствует: по индексу 0 [305556710S], по индексу 15 [100596269C]; 100596269C123
не совпадает.