我有这个正则表达式应该匹配1 ='aa'或1 =“aa”或1 = aa,并返回数字/值。匹配,直到正则表达式表达不正确
(?<number>\d)=\s*("|')?\s*(?<value>.*?)(?=("|')?\d=|$)
它的工作原理,但它返回的值不正确。号回来为1,但价值为AA”中的1 =的情况下,‘AA’
如何,我可以得到价值= AA为1 =的情况下,‘AA’。
实际表现可能含有1 = 'AA' 2 = “BB” 3 = CC等
我有这个正则表达式应该匹配1 ='aa'或1 =“aa”或1 = aa,并返回数字/值。匹配,直到正则表达式表达不正确
(?<number>\d)=\s*("|')?\s*(?<value>.*?)(?=("|')?\d=|$)
它的工作原理,但它返回的值不正确。号回来为1,但价值为AA”中的1 =的情况下,‘AA’
如何,我可以得到价值= AA为1 =的情况下,‘AA’。
实际表现可能含有1 = 'AA' 2 = “BB” 3 = CC等
这里的主要问题是,这样的:
(?=("|')?\d=|$)
装置“后面是任何以下的:
"
加上一个数字加=
'
加上一个数字加=
=
”。你会注意到,而不是允许"
或'
与数字之间的空格;所以在1="aa" 2=...
的情况下,value
根本不是允许的之后是" 2=...
。同样,而不是可以为"
或'
加上字符串结尾。
所以最小的解决办法是让—不,需要 —数字之前的一些空白,并移动("|')?
出前向断言,进入正则表达式的主要部分:
("|')?(?=\s+\d=|$)
捐赠:
(?<number>\d)=\s*("|')?\s*(?<value>.*?)("|')?(?=\s+\d=|$)
虽然我们在这,我们不妨做一些其他的调整,以简化正则表达式和减少案件的数量在那里可以去WRO NG:
(?<number>\d)=\s*(["']?)(?<value>.*?)\1(?=\s+\d=|$)
(进一步清理是可能的,但我不知道有足够的了解您的数据,建议更多的变化)
尝试
(?<number>\d)=\s*("|')?\s*(?<value>.+?)("|')?(\s|$)
它会工作,如果分配后面跟着一个空格或一个行尾。
我编辑了我的答案,因为我以前的解决方案只适用于单个作业。 – 2012-03-25 21:44:15
保持简单。最简单和可读的方式来匹配完全一对引号(它们是相同的,例如,不喜欢的有:1='aa"
)如下:
(
(
(?P<number>\d)="(?P<value>[^"]+)" #or * in stead of + if value can be empty
) |
(
(?P<number>\d)='(?P<value>[^']+)' #or * in stead of + if value can be empty
) |
(
(?P<number>\d)=(?P<value>[^\s]+) #here you should also choose where you stop
)
)
其他项目要考虑:
使用方括号可选字符可避免不必要的捕捉组
(?<数> \ d +)\ S * = \ S * [ “']?(?<值> [^”'\ S ] +)“']
谢谢它正常工作当您从SO复制,也复制了新线等它不是正常工作感谢您的帮助 – 2012-03-26 00:11:03
@AlexJ?。。:不客气! – ruakh 2012-03-26 00:11:42