2012-12-25 1 views
2

System.Text.RegularExpressions.Group에 Name 속성이없는 이유는 무엇입니까? C#을의 정규 표현식에서

(?<One>abc) 

그러나, 클래스 System.Text.RegularExpressions.Group에서에 대한 특성이없는, 우리는 정규 표현식을 작성할 수 있습니다 예를 들어, 그룹에 이름을 할당 그룹 이름. 우리가 이름을 얻을 수있는 유일한 방법은

그들이 이름을 그룹 클래스에 속성을 넣을 수없는 이유
System.Text.RegularExpressions.GetGroupNames() 

입니까? 의도적으로 그렇게하지 않는 특별한 이유가 있습니까?

편집 : 나는 다음과 같은 기능을 사용하려고 할 때 내가이 질문에 건너 온 :

Regex.Replace(string input, 
string pattern, 
MatchEvaluator evaluator 
) 

내가 여러 개의 서로 다른 정규 표현식을 기반으로 대체 처리하기 위해 그냥 같은 하나의 평가자를 사용하고 싶습니다. 그룹에 대한 이름 속성이있는 경우 평가자 내에서 이름을 보면 정규 표현식을 알 수 있습니다. 그러나 그러한 자산은 없습니다.

결국 나는 클로저를 사용하고 GetGroupNames를 사용했지만 여전히 name 속성이 있어야한다고 생각합니다. 그룹에 이름이없는 경우 속성은 null 일 수 있습니다.

+0

질문이 명확하지 않습니다. 그것은 당신이 일하고자하는 종류의 코드에 대한 코드 예제를 게시 한 경우 질문을 명확히하는 데 도움이됩니다. –

+0

정규식을 만든 경우 그룹 이름이 무엇인지 알 수 없습니까? –

+0

디자인 팀의 누군가가 이것을 보지 않는다면 우리가 할 수있는 것은 추측입니다. 내 생각 엔 개발 및 테스트 시간을 보증 할만큼 중요하지 않다고 생각합니다. – tvanfosson

답변

4

은 API에 GroupName을 포기하지 않을 뒤에 논리는 당신이 다음 그룹이 가능성이 int 소요 인덱서를 통해 GroupCollection에서 Group를 검색 한 경우가 아닌 한 이름; 그렇지 않은 경우 string 인 인덱서를 통해 검색하는 것이 좋습니다.

반면에 인덱서에서 string을 사용하여 그룹을 검색 한 경우 이미 그룹 이름을 알고 있습니다.

+0

불행하게도,이 논리에는 결함이 있습니다. 실제 시나리오에서 'Name'속성이 필요하기 때문입니다. 예를 들어, 응용 프로그램의 다른 구성 요소에서 전달 된 정규식을 실행하고 있습니다. 정규식의 명명 된 그룹이 무엇인지는 디자인 타임에 알지 못하지만 이름 - 값 쌍을 만들기 위해 이름을 바꿔야합니다. – MgSam

+0

@MgSam ['Regex.GetGroupNames'] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.getgroupnames.aspx) 메서드는이 상황에서 유용합니다. – dasblinkenlight

+0

불행히도 그 방법은 특히 유용하지 않습니다. 'Name'이 무엇인지 알려주는'Group'을 알고 싶다면'Regex'에서 이름의 배열을 (보장되지 않은 순서로) 배열하는 것이 당신을별로 좋아하지 않습니다. 특히 정규 표현식 (Regex)에 정적 메소드를 사용하는 것이 인스턴스화하는 것보다 바람직합니다 (캐싱 이유로). 리플렉션을 통해 정보를 검색 할 수 있기 때문에'Name' 속성을 제공하는 것이 가능할 것입니다. – MgSam

0

Group Class의 설명서에는 클래스의 최신 버전이 실제로 Name 속성을 가지고 있음을 나타냅니다. 내 경험에 의하면이 런타임에 사용할 수 있지만 컴파일 시간에 (!!) MSDN 포럼에서이 문제에 관한 질문을했습니다. forum question

+0

[** 버전 정보 **] (https://msdn.microsoft.com/library/system.text.regularexpressions.group.name.aspx#Anchor_1)를 읽어보십시오. – PetSerAl

관련 문제