아래 정규 표현식을 사용하여 단어 앞에 숫자를 가져옵니다.
예 :
838123 someWord 8 someWord 12 someWord
(\d+)\s*someWord
그러나 때로는 숫자와 단어 사이에 무언가가 올 수 있습니다. 아래 예제 줄을 참조하십시오.
전의:
Someword 12의 43434 Someword 2323 새로운 someword
정규식을 사용하여 단어 앞에 정확한 숫자를 얻는 방법은 무엇입니까?
당신의 제안을 알려주십시오.
아래 정규 표현식을 사용하여 단어 앞에 숫자를 가져옵니다.
예 :
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] 전에 나에 대한 정규 후 someWordA의 모습 "비 단어 문자" 이전과 이후 - 라인의 끝은 여기 계산합니다. 물론 정확한 요구 사항에 따라 더 복잡하고 구체적으로 만들 수 있습니다.
첫째는 분리 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
사용 \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 정규식 데모보기
mtch.Groups["Value"].Value필요에 따라 정보를 추출 하려면 명명 된 일치 캡처 (데이터 사용 등)를 사용하십시오.
(?<Value>\d+) -- Get the digits
(?<Other>.+?) -- Capture all text, but minimal (greedy) capture
(?<Key>someword) -- til the keyword here.
위를 실행하면 ( 와 IgnorePatternWhiteSpace달리 주석을 제거하고 같은 실행하는 패턴 가입 (?<Value>\d+)(?<Other>.+?)(?<Key>someword)없이 정규식 옵션 )은 각 데이터 / 키 쌍에 대한 데이터를 얻을 번의 매치에서 각을 구성합니다.
결과
다음은 모든 개별 경기에 포함 된 결과 (두 번째 예)와 그룹 및 캡처가 각 경기에 제공하는 결과입니다.
Match #0
[0]: 43434˽of˽someword
["Value"] → [1]: 43434
→1 Captures: 43434
["Other"] → [2]: ˽of˽
→2 Captures: ˽of˽
["Key"] → [3]: someword
→3 Captures: someword
Match #1
[0]: 12˽anything˽someword
["Value"] → [1]: 12
→1 Captures: 12
["Other"] → [2]: ˽anything˽
→2 Captures: ˽anything˽
["Key"] → [3]: someword
→3 Captures: someword
Match #2
[0]: 2323˽new˽someword
["Value"] → [1]: 2323
→1 Captures: 2323
["Other"] → [2]: ˽new˽
→2 Captures: ˽new˽
["Key"] → [3]: someword
→3 Captures: someword
시각적으로 일치하는 내용은 다음과 같습니다.