[c#] C #에서 정규 표현식을 사용하여 특정 단어 앞에 숫자를 얻는 방법은 무엇입니까?

아래 정규 표현식을 사용하여 단어 앞에 숫자를 가져옵니다.

예 :

838123 someWord 8 someWord 12 someWord

(\d+)\s*someWord

그러나 때로는 숫자와 단어 사이에 무언가가 올 수 있습니다. 아래 예제 줄을 참조하십시오.

전의:

Someword 12의 43434 Someword 2323 새로운 someword

정규식을 사용하여 단어 앞에 정확한 숫자를 얻는 방법은 무엇입니까?

당신의 제안을 알려주십시오.



답변

이 작업을 수행:

(\d+)[^\d]+some[wW]ord

숫자 이외의 다른 것을 허용해야합니다. 또한 둘 다 고려 w하고 W당신의 예를 모두 포함하기 때문이다.

데모


답변

“anything”에 숫자가 포함되어 있지 않다고 가정하면이 정규식을 사용할 수 있습니다.

(\d+)[^\d]+someWord

정규식 데모


답변

에 대한 일치하는 경우 CinCout의 대답에서 한 가지 “놓친 코너의 경우는” someWord경우 예를 들어, 정확한해야 notsomeWordsomeWordNotThis일치 할 수 없습니다.

해당 정규 표현식에 대한 다음 확장은이를 해결하는 방법을 제공합니다.

(\d+)[^\d]*[^\w]some[wW]ord[^\w]

설명 :[^\w] 전에 나에 대한 정규 후 someWordA의 모습 “비 단어 문자” 이전과 이후 – 라인의 끝은 여기 계산합니다. 물론 정확한 요구 사항에 따라 더 복잡하고 구체적으로 만들 수 있습니다.

데모


답변

다음과 같이 시도해보십시오.

(\d+)\s?([^\d]*)

(\d+)    - get the digits
\s?      - discard a possible space
([^\d]*) - get all chars that are not digits

여기서 테스트를 볼 수 있습니다


답변

첫째는 분리 some[wW]ord, numberspace패턴으로, 다음에 제 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 정규식 데모보기