설명
일부 문제는 \w
도 모든 문자 a-z, 모든 숫자 0-9 및 밑줄 _
을 포함한다는 것입니다. 당신의 입력 텍스트가 _
구분 기호를 사용할 수 있다면 당신은 구분 기호로 언더를 허용하는 요구 사항을 가지고 있기 때문에 다음 \w+
일치하는 표현이
혼란스러워 할 것이다 그래서 나는 당신이 대신 문자 클래스를 '정의하는 대신 짧은 손 \w
을 사용하는 것이 좋습니다 원하는 텍스트와 구분 기호를 모두 좋아합니다.
[0-9a-zA-Z]+
어떤 순서
[^a-zA-Z0-9]
이것은 부정 문자 클래스, 그리고 어떤 alphebetical없는 문자 또는 숫자
이 정규식 일치를 일치 하나 이상의 alphebetical 또는 숫자와 일치합니다 모든 값을 가질 수 있으며 다양한 구분 기호를 사용할 수 있습니다.편지 공간 번호 하이픈 번호 :
^(?<pol>[0-9a-zA-Z]+)[^a-zA-Z0-9](?<fac>[0-9a-zA-Z]+\s[0-9a-zA-Z]+-[0-9a-zA-Z]+)[^a-zA-Z0-9](?<end>[0-9a-zA-Z]+)[^a-zA-Z0-9](?<op>[0-9a-zA-Z]+)
그룹
내가 형식이됩니다 분야를 가정하고있어 fac
그룹을 일치합니다.
- 그룹 0 FAC 2 = 3 = 단, 4 = OP 그러나 화상 POL = 1에서, 전체 매칭 문자열
- 명명 된 그룹을 생성한다 얻을 것이다. 드로잉 소프트웨어가 혼란을 가져서 죄송합니다. 명명 된 캡처 그룹을 처리하지 못합니다.
C# 코드 예제 :
입력 텍스트
12_B 99-23_9_23
11_a 11-11_1_11
22|b 22-22|2|22
33-c 33-33-3-33
44,d 44-44,4,44
코드
using System;
using System.Text.RegularExpressions;
namespace myapp
{
class Class1
{
static void Main(string[] args)
{
String sourcestring = "source string to match with pattern";
Regex re = new Regex(@"^(?<pol>[0-9a-zA-Z]+)[^a-zA-Z0-9](?<fac>[0-9a-zA-Z]+\s[0-9a-zA-Z]+-[0-9a-zA-Z]+)[^a-zA-Z0-9](?<end>[0-9a-zA-Z]+)[^a-zA-Z0-9](?<op>[0-9a-zA-Z]+)",RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
}
}
}
일치
$matches Array:
(
[0] => Array
(
[0] => 12_B 99-23_9_23
[1] => 11_a 11-11_1_11
[2] => 22|b 22-22|2|22
[3] => 33-c 33-33-3-33
[4] => 44,d 44-44,4,44
)
[pol] => Array
(
[0] => 12
[1] => 11
[2] => 22
[3] => 33
[4] => 44
)
[fac] => Array
(
[0] => B 99-23
[1] => a 11-11
[2] => b 22-22
[3] => c 33-33
[4] => d 44-44
)
[end] => Array
(
[0] => 9
[1] => 1
[2] => 2
[3] => 3
[4] => 4
)
[op] => Array
(
[0] => 23
[1] => 11
[2] => 22
[3] => 33
[4] => 44
)
)
감사합니다! 그러나이 예제에서는 부작용이 없습니다 ... 12 | B 99-23 | 9 | 23 다음 구분 기호까지 일치해야합니다. 위의 예에서와 같은 것입니다 :^나는했습니다 –
아주 좋은 그것을 설명하지 않는 경우 죄송합니다 (+ w \ < pol>?) | (< fac>?) | | (+ w \ < end>?) (+ w \ < op>?) 내 대답을 업데이트하여'|'문자에 사용할 패턴을 포함 시켰습니다. 당신은 "구분 기호는 무엇이든 될 수 있습니다."라고 말했지만, 그건별로 의미가 없습니다. 어떤 구획 문자를 기대합니까? 혼합 된 구분 기호를 처리해야합니까? '12 | B 99_23 | 9 | 23'은 어떻게 일치해야합니까? –