我想使用正则表达式来表示具有以下类型特征的模式
1)它包括连续的数字值序列。该序列的长度至少为 1
2) 在上述序列的第一个数字值之前,或在上述序列的最后一个数字值之后,或前后都至少有一个非数字字符。因此,正则表达式应该匹配以下示例:
A123
A123B
#A123BNNN
.123
-123+
另一方面,AB123B123
超出了上述模式的范围,因为它有两个数字值序列。本题不需要考虑这种场景。希望我已经把这个问题说清楚了。
答案1
这似乎可以做你想做的事情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
使用 Perl 中提供的大部分正则表达式引擎。
参考
答案2
您的描述似乎可以归结为一个非数字后跟一个数字,或者一个数字后跟一个非数字。
grep -e '[^0-9][0-9]' -e '[0-9][^0-9]'
答案3
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
'
(编辑:不必处理无数字的情况,问题陈述已排除了这种情况。