2016-02-01 72 views
1

我現在很難與正則表達式。正則表達式與多個repeeding

我能夠在Regexbuddy中調試正則表達式,但不知何故它不能在C#.net中工作。

例如。

我的輸入字符串: -

--8W1_805_431____0210_A01_0002_L--;%{PE}%R 
8.2.24,%MKUKATPBASIS,%CCOMMENT,%VNORMAL,%P 2: --8W1_805_431____0210_A01_0002_L-- 
;ENDFOLD 

;FOLD PTP SG003920 Vel=100 % PDAT5 ServoGun=8 Cont=OPN Part=2.65 mm WeldTimer=WTDAT1 Tool[1]:zc1 Base[1]:510wz1;%{PE}%R 4.1.25,%MKUKATPSERVOTECH,%CSpotTC,%VPTP,%P 1:PTP, 2:SG003920, 3:, 5:100, 7:PDAT5, 9:1, 11:1, 13:OPN, 15:2.65, 18:1, 21:0, 24:0, 27:5, 30:0, 33:WTDAT1 
$BWDSTART=FALSE 
PDAT_ACT=PPDAT5 
FDAT_ACT=FSG003920 
BAS(#PTP_PARAMS,100) 
EG_SPOT_POINT_NAME[]="SG003920" 
EG_EXTAX_ACTIVE=EG_SERVOGUN_EXAXIS[1] 
EG_THICKNESS=2.65 
EG_GUN_FORCE=1 
EG_COMP_HELP=0 
EG_COMPENSATE_PATH=0 
EG_PROGRAM_NUMBER=003920 
EG_HELPPOINT=EG_CHTIP(XSG003920) 
PTP EG_HELPPOINT 
EG_APPROX_OPEN=FALSE 
CMD=#SPOT 
EG_SPOT_POINT=EG_HELPPOINT 
EG_SPOT(WTWTDAT1) 
PTP EG_HELPPOINT C_DIS 
CMD=#STOP_POINT_END 
EG_SPOT_POINT=EG_HELPPOINT 
EG_SPOT() 

    ; --8W1_112_431____0210_A01_0001_L--;%{PE}%R 8.2 

;FOLD PTP SG003918 Vel=100 % PDAT7 ServoGun=1 Cont=OPN Part=2.65 mm WeldTimer=WTDAT2 Tool[1]:zc1 Base[1]:510wz1;%{PE}%R 4.1.25,%MKUKATPSERVOTECH,%CSpotTC,%VPTP,%P 1:PTP, 2:SG003918, 3:, 5:100, 7:PDAT7, 9:1, 11:1, 13:OPN, 15:2.65, 18:1, 21:0, 24:0, 27:5, 30:0, 33:WTDAT2 
$BWDSTART=FALSE 
PDAT_ACT=PPDAT7 
FDAT_ACT=FSG003918 
BAS(#PTP_PARAMS,100) 
EG_SPOT_POINT_NAME[]="SG003918" 
EG_EXTAX_ACTIVE=EG_SERVOGUN_EXAXIS[1] 
EG_THICKNESS=2.65 
EG_GUN_FORCE=1 
EG_COMP_HELP=0 
EG_COMPENSATE_PATH=0 
EG_PROGRAM_NUMBER=003918 
EG_HELPPOINT=EG_CHTIP(XSG003918) 
PTP EG_HELPPOINT 
EG_APPROX_OPEN=FALSE 
CMD=#SPOT 
EG_SPOT_POINT=EG_HELPPOINT 
EG_SPOT(WTWTDAT2) 
PTP EG_HELPPOINT C_DIS 
CMD=#STOP_POINT_END 
EG_SPOT_POINT=EG_HELPPOINT 
EG_SPOT() 
;ENDFOLD 


Regex Pattern:- --(?<PName>8W.*?)--.*?(?<MType>PTP|LIN).*?(?<PointNa>SG) 

輸出必須這樣該組PNAME。

8W1_112_431____0210_A01_0001_L

8W1_805_431____0210_A01_0002_L

當我運行這個表達式在C#中的收益始終爲false。

請任何人指導我什麼是錯在這裏。

在此先感謝。

+0

模式,我用的是:正則表達式: - (?。? 8W *) - ?(? PTP | LIN) - * ?(? SG) – user1521171

+0

在開頭添加'(?s)'。或者使用'RegexOptions.Singleline' –

+0

@WiktorStribiżew爲什麼使用「RegexOptions.Singleline」我在輸入字符串中有多行 – user1521171

回答

1

解決方案很簡單:在開頭添加(?s)。或者使用RegexOptions.Singleline國旗與您的Regex.Match

IDEONE demo

您需要了解的regex modifiers in .NET regex作用:

  • RegexOptions.Singleline - 指定單行模式。更改點的含義(.),使其匹配每個字符(而不是除\n之外的每個字符)。有關更多信息,請參閱Regular Expression Options主題中的「單線模式」部分。

  • RegexOptions.Multiline - 多行模式。更改^$的含義,以便它們分別匹配任何行的開頭和結尾,而不僅僅是整個字符串的開頭和結尾。有關更多信息,請參閱Regular Expression Options主題中的「單線模式」部分。

而且,看到Difference between regular expression modifiers 'm' and 's'?