строковое представление с использованием регулярного выражения (измененное)

Я хотел бы использовать регулярное выражение для представления шаблона со следующими характеристиками

1) Он включает в себя непрерывную последовательность значений цифр. Длина этой последовательности не менее 1

2) Существует, по меньшей мере, один нецифровой символ либо до первого знака вышеуказанной последовательности, либо после последнего значени значени вышеуказанной последовательности, либо как до, так и конца. Поэтому регулярное выражение должно соответствовать следующим примерам:

A123 A123B #A123BNNN .123 -123+ 

С другой стороны, AB123B123 выходит за рамки вышеприведенного шаблона, так как он имеет две последовательности цифр. Этот вопрос не требует рассмотрения этого сценария. Надеюсь, я ясно сформулировал этот вопрос.

Это похоже на то, что вы хотите использовать grep :

 $ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt 

Добавление дополнительных строк в data.txt показало бы, что это работает в соответствии с вашими требованиями.

пример

 $ cat data.txt &320 *10- AB123- 1234 ABCDEF a20d34 12a12 32q5858j ' 2323 ' 234aaa #A123BNNN .123 -123+ 

Пример прогона:

 $ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt &320 *10- AB123- ' 2323 ' 234aaa #A123BNNN .123 -123+ 

Если вы не знакомы с переключателем grep -P см. Ссылку ниже. Коммутатор позволяет grep использовать большую часть hte regex engine, доступную на Perl.

Рекомендации

  • PCRE – совместимые регулярные выражения Perl

Ваше описание, похоже, сводится к одной из цифр, за которой следует цифра, или цифре, за которой следует не цифра.

 grep -e '[^0-9][0-9]' -e '[0-9][^0-9]' 
 sed ' /^[^0-9]\+[0-9]/b # at least non-digit either before the first digit /[0-9][^0-9]\+$/b # or after the last digit d ' 

(редактирование: не нужно обрабатывать случай без цифр, это исключает оператор проблемы.