具有多重重复的正则表达式
我现在很难用正则表达式。
我能够在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:- --(?8W.*?)--.*?(?PTP|LIN).*?(?SG)
对于组PName,输出必须如此。
8W1_112_431____0210_A01_0001_L
8W1_805_431____0210_A01_0002_L
当我在c#中运行这个正则表达式时,它的返回总是为假。
请任何人指导我这里有什么问题。
提前致谢。
解决方案很简单:在开头添加(?s)
。 或者在Regex.Match
使用RegexOptions.Singleline
标志。
请参阅IDEONE演示
您需要了解正则表达式修饰符在.NET正则表达式中的作用 :
-
RegexOptions.Singleline
– 指定单行模式。 更改点(.
)的含义,使其匹配每个字符(而不是除\n
之外的每个字符)。 有关详细信息,请参阅“ 正则表达式选项”主题中的“单行模式”部分。 -
RegexOptions.Multiline
– 多行模式。 更改^
和$
的含义,使它们分别在任何行的开头和结尾匹配,而不仅仅是整个字符串的开头和结尾。 有关详细信息,请参阅“ 正则表达式选项”主题中的“单行模式”部分。
另外,请参阅正则表达式修饰符’m’和’s’之间的区别?