【正则表达式】使用特殊字符($)进行正则匹配
一、问题背景
在数据提取的时候,往往需要进行正则匹配。但是在包含特殊字符(例如:$、?、#、^)的字符串,进行匹配时发现以前简单的搜索并不能匹配到对应数据。
经过一段时间挣扎后,虽然解决了,但是害怕忘记,特此记录。
二、问题简述
在一个包含$GPGGA,$GPRMC,$GPVTG,...
的文本中,我需要通过字符串$GPGGA,
进行匹配,筛选出$GPGGA,
的所在行的文本。
$GPGGA,050213.00,3112.7473316,N,12135.6498261,E,4,40,0.4,24.2587,M,11.500,M,6.0,00044B
$GPRMC,050213.00,A,3112.7473316,N,12135.6498261,E,000.001,112.0,131223,0.0,W,D24
$GPVTG,112.003,T,112.003,M,0.001,N,0.003,K,D24
$GPGGA,050214.00,3112.7473304,N,12135.6498250,E,4,40,0.4,24.2657,M,11.500,M,2.0,000447
$GPRMC,050214.00,A,3112.7473304,N,12135.6498250,E,000.002,151.5,131223,0.0,W,D23
$GPVTG,151.529,T,151.529,M,0.002,N,0.004,K,D20
$GPGGA,050215.00,3112.7473305,N,12135.6498259,E,4,40,0.4,24.2666,M,11.500,M,3.0,00044D
$GPRMC,050215.00,A,3112.7473305,N,12135.6498259,E,000.003,134.4,131223,0.0,W,D29
$GPVTG,134.380,T,134.380,M,0.003,N,0.005,K,D20
$GPGGA,050216.00,3112.7473306,N,12135.6498254,E,4,40,0.4,24.2686,M,11.500,M,4.0,000449
$GPRMC,050216.00,A,3112.7473306,N,12135.6498254,E,000.003,153.1,131223,0.0,W,D20
$GPVTG,153.079,T,153.079,M,0.003,N,0.005,K,D20
根据经验,上来直接就是ctrl+F
搜索框弹出,然后加ctrl+C、ctrl+V
复制$GPGGA,
,直接点击查找。结果不出所料。
如图所示,发现无法搜索,。
经过测试,发现使用普通模式能匹配到我需要匹配的字段。
于是问题来了,为什么正则不可以?
个人理解,理论上来讲正则要比普通匹配更高级。所以本着工具没有问题,绝对是使用的方法问题的思路,进行资料查找。下面是解决方法
三、解决方法
3.1.在特殊字符前面增加\
就可以匹配特殊字符
正则的匹配内容切换为:
\$GPGGA,
后,点击查找
3.2.如图所示,虽然查找到了对应的字符,但是没有选中$GPGGA,
文本后面的内容,我们也并不需要复制一堆$GPGGA,
,为了解决这个问题继续挣扎。
3.3.查阅资料后,发现可以通过在匹配内容后,添加.*
来满足需求
正则的匹配内容切换为:
\$GPGGA,.*
后,点击查找
3.4.完成需要的内容匹配,复制,粘贴到新建文本
3.5.问题解决
四、总结
这问题来源还是正则不熟练,后续还需要了解,并在日后又更好方式的时候进行更新。