C # RegEx 문자열 추출
문자열이 있습니다.
"ImageDimension = 655x0; ThumbnailDimension = 0x0".
"ImageDimension ="과 "x"의 첫 번째 발생 사이에 들어오는 첫 번째 숫자 ( "655"문자열)를 추출해야합니다. "ImageDimension ="문자열 다음에 발생하는 첫 번째 "x"뒤에 오는 두 번째 숫자 ( "0"문자열)를 추출해야합니다. 세 번째 및 네 번째 숫자와 유사합니다.
( "= ImageDimension이는 정규식 수행 할 수 있습니다 ? X ? ; ThumbnailDimension = ? X ? 방법")와? 서투른 부분 문자열과 indexof 대신? 감사합니다!
좋지 않은 내 솔루션 :
String configuration = "ImageDimension=655x0;ThumbnailDimension=0x0";
String imageDim = configuration.Substring(0, configuration.IndexOf(";"));
int indexOfEq = imageDim.IndexOf("=");
int indexOfX = imageDim.IndexOf("x");
String width1 = imageDim.Substring(indexOfEq+1, indexOfX-indexOfEq-1);
String height1 = imageDim.Substring(imageDim.IndexOf("x") + 1);
String thumbDim = configuration.Substring(configuration.IndexOf(";") + 1);
indexOfEq = thumbDim.IndexOf("=");
indexOfX = thumbDim.IndexOf("x");
String width2 = imageDim.Substring(indexOfEq + 1, indexOfX - indexOfEq-1);
String height2 = imageDim.Substring(imageDim.IndexOf("x") + 1);
이렇게하면 각 값이 별도의 int로 표시됩니다.
string text = "ImageDimension=655x0;ThumbnailDimension=0x0";
Regex pattern = new Regex(@"ImageDimension=(?<imageWidth>\d+)x(?<imageHeight>\d+);ThumbnailDimension=(?<thumbWidth>\d+)x(?<thumbHeight>\d+)");
Match match = pattern.Match(text);
int imageWidth = int.Parse(match.Groups["imageWidth"].Value);
int imageHeight = int.Parse(match.Groups["imageHeight"].Value);
int thumbWidth = int.Parse(match.Groups["thumbWidth"].Value);
int thumbHeight = int.Parse(match.Groups["thumbHeight"].Value);
var groups = Regex.Match(input,@"ImageDimension=(\d+)x(\d+);ThumbnailDimension=(\d+)x(\d+)").Groups;
var x1= groups[1].Value;
var y1= groups[2].Value;
var x2= groups[3].Value;
var y2= groups[4].Value;
var m = Regex.Match(str,@"(\d+).(\d+).*?(\d+).(\d+)");
m.Groups[1].Value; // 655 ....
(\d+)
하나 이상의 숫자의 첫 번째 집합을 가져옵니다. 전체 경기 후 첫 번째 캡처 그룹으로 저장
.
모든 문자와 일치
(\d+)
다음 하나 이상의 숫자 집합을 가져옵니다. 전체 경기 후 두 번째 캡처 그룹으로 저장
.*?
탐욕스럽지 않은 방식으로 문자의 일치 및 수.
(\d+)
다음 하나 이상의 숫자 집합을 가져옵니다. 전체 경기 후 세 번째 캡처 된 그룹으로 저장합니다.
(\d+)
다음 하나 이상의 숫자 집합을 가져옵니다. 전체 경기가 끝난 후 캡처 된 네 번째 그룹으로 저장합니다.
이미 많은 분들이 원하시는 것을 주셨 기 때문에 다른 것으로 공헌하겠습니다. 정규식은 읽기 어렵고 오류가 발생하기 쉽습니다. 구현보다 약간 덜 장황하지만 정규 표현식을 사용하는 것보다 더 간단하고 친숙합니다.
private static Dictionary<string, string> _extractDictionary(string str)
{
var query = from name_value in str.Split(';') // Split by ;
let arr = name_value.Split('=') // ... then by =
select new {Name = arr[0], Value = arr[1]};
return query.ToDictionary(x => x.Name, y => y.Value);
}
public static void Main()
{
var str = "ImageDimension=655x0;ThumbnailDimension=0x0";
var dic = _extractDictionary(str);
foreach (var key_value in dic)
{
var key = key_value.Key;
var value = key_value.Value;
Console.WriteLine("Value of {0} is {1}.", key, value.Substring(0, value.IndexOf("x")));
}
}
물론, 꽤 쉽습니다. 찾고있는 정규식 패턴은 다음과 같습니다.
^ImageDimension=(\d+)x0;.+$
The first group in the match is the number you want.
ReferenceURL : https://stackoverflow.com/questions/9436381/c-sharp-regex-string-extraction
'code' 카테고리의 다른 글
속성 설정자가 공용인지 확인하는 방법 (0) | 2021.01.06 |
---|---|
Moq 모의 객체를 생성자에 전달 (0) | 2021.01.06 |
폴더가 비어있는 경우 Powershell 테스트 (0) | 2021.01.06 |
콘솔 애플리케이션의 실행 디렉토리를 얻는 방법 (0) | 2021.01.06 |
Main에서 비동기 메서드를 어떻게 호출 할 수 있습니까? (0) | 2021.01.06 |