아래 정규 표현식을 사용하여 단어 앞에 숫자를 가져옵니다.
예 :
838123 someWord 8 someWord 12 someWord
(\d+)\s*someWord
그러나 때로는 숫자와 단어 사이에 무언가가 올 수 있습니다. 아래 예제 줄을 참조하십시오.
전의:
Someword 12의 43434 Someword 2323 새로운 someword
정규식을 사용하여 단어 앞에 정확한 숫자를 얻는 방법은 무엇입니까?
당신의 제안을 알려주십시오.
답변
답변
답변
에 대한 일치하는 경우 CinCout의 대답에서 한 가지 “놓친 코너의 경우는” someWord
경우 예를 들어, 정확한해야 notsomeWord
와 someWordNotThis
일치 할 수 없습니다.
해당 정규 표현식에 대한 다음 확장은이를 해결하는 방법을 제공합니다.
(\d+)[^\d]*[^\w]some[wW]ord[^\w]
설명 :[^\w]
전에 나에 대한 정규 후 someWord
A의 모습 “비 단어 문자” 이전과 이후 – 라인의 끝은 여기 계산합니다. 물론 정확한 요구 사항에 따라 더 복잡하고 구체적으로 만들 수 있습니다.
답변
다음과 같이 시도해보십시오.
(\d+)\s?([^\d]*)
(\d+) - get the digits
\s? - discard a possible space
([^\d]*) - get all chars that are not digits
여기서 테스트를 볼 수 있습니다
답변
첫째는 분리 some[wW]ord
, number
및 space
패턴으로, 다음에 제 2 패턴을 실행할
var pattern = @"\b(some[wW]ord|[\d]|\s)*\b";
var rgx = new Regex(pattern);
var sentence = "43434 of someword 12 anything someword 2323 new someword";
var result = string.Empty;
foreach (Match match in rgx.Matches(sentence)){
result += match.Value;
}
//output => result: 43434 someword 12 someword 2323 someword
var patternOnCorrectSentence = @"\b(\d+)\s*some[wW]ord*\b";
var rgxOnCorrectSentence = new Regex(patternOnCorrectSentence);
var resultOnCorrectSentence = new List<string>();
foreach (Match match in rgxOnCorrectSentence.Matches(result)){
resultOnCorrectSentence.Add(match.Value);
}
resultOnCorrectSentence.ForEach(Console.WriteLine);
Console.ReadKey();
첫 번째 패턴이 실행될 때, 문장은 원하는대로
Someword 12의 43434 Someword 2323 새로운 someword
변화:
43434 Someword 12 Someword 2323 Someword
답변
그러나 때로는 숫자와 단어 사이에 무언가가 올 수 있습니다. 아래 예제 줄을 참조하십시오.
전의:
Someword 12의 43434 Someword 2323 새로운 someword
이 시도
(\ d +) (. *?) 단어
설명
\ d +-숫자
. *? -숫자 뒤에는 발생하지만 최소 발생은 없습니다.
someword-다소 정확하게 일치
답변
사용 \s*
은 0 개 이상의 공백 문자와 만 일치합니다.
사용할 수는 \D+
있지만 숫자를 제외한 모든 문자와 일치하므로 줄 바꿈과 일치합니다.
같은 줄의 숫자를 일치 시키려면 부정 문자 클래스에 줄 바꿈을 일치시키지 않을 수 있습니다 [^\d\r\n]
귀하의 예에서는을 사용 \d
하지만 하나 이상의 숫자 0-9 만 일치 시키려면 문자 클래스를 사용할 수 있습니다[0-9]+
숫자와 단어가 더 큰 단어의 일부가되는 것을 방지하기 위해 단어 경계를 사용할 수 있습니다 \b
대소 문자를 구분하지 않고 단어를 일치 RegexOptions.IgnoreCase
시키려면 인라인 수정자를 사용하십시오.(?i)
(?i)\b([0-9]+)\b[^\d\r\n]*\bsomeword\b
.NET 정규식 데모보기