使用正则表达式的字符串表示(已修改)

使用正则表达式的字符串表示(已修改)

我想使用正则表达式来表示具有以下类型特征的模式

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
'

(编辑:不必处理无数字的情况,问题陈述已排除了这种情况。

相关内容