2011-09-29 7 views
1

괄호 안에없는 숫자를 찾을 수있는 정규 표현식이 필요합니다. 예 ABCD (1) (35) (DF)숫자 검색을위한 정규 표현식

그것은 단지 1

이 매우 복잡 볼 것인가? 나는 노력했지만 행운이 없었다. 어떤 도움

+2

사용중인 프로그래밍 언어는 무엇입니까? 그들은 모두 정규 표현식을 약간 다르게 사용합니다. – Chriszuma

+3

시도한 것을 게시하고 수정합니다. –

+0

Perl과 관련이 있어야합니다. 내가 사용하고있는 편집장에 따르면. 나는 내가 사용했던 예를 찾아서 게시 할 것이다. – jdross

답변

2

이 매우 어렵다하지만이 같은 아마 할 것입니다 :

^(?:\()(\d+)(?:[^)])|(?:[^(0-9]|^)(\d+)(?:[^)0-9]|^)|(?:[^(])(\d+)(?:\))$ 

문제는 (123, 123) 일치하는 것입니다 또한 비 괄호 문자 1 사이의 숫자 2로 문자열 123 일치하지 및 3. 또한 문자열의 시작과 끝 부분에 몇 가지 중요한 경우가있을 수 있습니다.

제 제안은이를 위해 정규식을 사용하지 않는 것입니다. 어쩌면 숫자와 일치하는 정규식을 사용하고 캡처 정보를 사용하여 주변 문자가 괄호가 아닌지 확인하십시오.

2

정규 표현식에 대한 감사는 다음과 같습니다

^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$ 

결과는 정규 표현식의 첫 번째 (유일한) 일치하는 그룹입니다.

전체 행의 내용 인 경우에만 정규 표현식이 일치하지 않아야하는 경우 ^$을 제거하고 싶을 수 있습니다. [a-zA-Z] 또는 [[:alpha:]]을 사용할 수도 있습니다. 이것은 사용하는 정규 표현식 엔진과 일치시킬 콘텐츠에 따라 다릅니다.

예 펄 코드 :

if (m/^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$/) { 
    print("$1\n"); 
} 

귀하의 질문에 가능한 좋은 대답은 (당신이 예를 들어 당신이 원한다면, 당신의 표현의 일반적인 형식에 대해 아무 말도하지 않았다 있도록 충분한 정보가 포함되어 있습니다 정수 또는 부동 소수점과 일치)

0

자세한 내용은 Regular Expression Library을 참조하십시오.

이 사이트는 많은 도움이 될 수 있습니다.

+0

만족스럽지 않으므로 -1을 주셔서 감사합니다. –

+2

SE는 Q/A 사이트입니다. 이것은 Q/"A 사이트가 아닌 다른 사이트로 연결되는 링크"입니다. 또한, 당신이 준 링크는 "괄호로 묶이지 않은 숫자와 어떻게 일치합니까?"라는 그의 질문에 대답하지 않습니다. 그 중 어딘가에서 숫자와 일치하는 203 개의 정규 표현식 만 제공합니다. 그는 그 (것)들을 전부 통과하고 아마 응답이 거기에서다는 것을 알아 내기 가정된다? – CanSpice

1

어떻게

/(?:^|[^\d(])(\d+)(?:[^\d)]|$)/ 

어떻습니까?이것은 문자열의 시작, 또는 숫자 또는 여는 괄호 아닌 문자가 앞에

  • ((?:^|[^\d(]))

  • 는 말까지 성공입니다 숫자의 문자열 (\d+)과 일치 문자열 또는 숫자 나 닫기 괄호 아닌 문자 ((?:[^\d)]|$))

3

쉬운 용액 제 원하지 않는 값을 제거하는 것이다

,174을
my $string = "abcd 12 (35) (df) 2311,22"; 
$string =~ s/\(\d+\)//g;   # remove numbers within parens 
my @numbers = $string =~ /\d+/g; # extract the numbers