정규식을 사용한 문자열 표현(수정됨)

정규식을 사용한 문자열 표현(수정됨)

정규식을 사용하여 다음과 같은 유형 특성을 가진 패턴을 표현하고 싶습니다.

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아래 리소스를 참조하세요. 이 스위치를 사용하면 grepPerl에서 사용할 수 있는 대부분의 정규식 엔진을 사용할 수 있습니다.

인용하다

답변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
'

(편집: 숫자가 없는 경우를 처리할 필요가 없습니다. 문제 설명에서는 이미 이를 배제합니다.

관련 정보