python 正则表达式 反斜杠(/)的麻烦和陷阱

要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四个"\\\\",完美匹配。

复制代码 代码如下:

import re

re_str_patt = "\\\\"

reObj = re.compile(re_str_patt)

str_test = "abc\\cd\\hh"

print reObj.findall(str_test)

输出:['\\', '\\']

这里要这么理解,首先第一重转换是字符串自身的转义,那么"\\\\",实际上就是表示两个反斜杠(两个字符),然后传入正则表达式解析器,因为反斜杠依然是转义字符,那么进行第二重转换,两个反斜杠就代表一个反斜杠,所以就能和一个反斜杠进行匹配了,那么匹配连续的两个反斜杠,写正则表达式时就要写8次"\"了,相当壮观,要匹配/d+(这个在正则表达式里面表示连续1一个以上的数字字符)这个字符串怎么写呢?

复制代码 代码如下:

import re

re_str_patt = "\\\\d\\+"

print re_str_patt

reObj = re.compile(re_str_patt)

print reObj.findall("\\d+")

写成re_str_patt = "\\\\d\+"也行,因为\+对于字符串来说,没有转义意义,所以就当成一个反斜杠了。

在python中写正则表达式时用得最多的是raw字符串,原生字符串,什么意思?就是只有一重转换了,没有字符串转换了,只在正则表达式内部进行转换了,这样匹配一个反斜杠的正则表达式可以这样写,re_str_patt = r"\\",有人会想,以后写windows的文件路径什么的方便了,呵呵直接 path = r"c:\myforder\xx" 搞定,是的,这句没有问题,但是如果你写成 path = r"c:\myforder\xx\",直接报错了,为什么?因为反斜杠虽然不作为转义字符了,但是还是对它后面的引号(包括单引号)有影响,使这个引号不被视为字符串的终止,以为它后面还有字符,但是实际没有,因此会报错。其实可以反过来想raw字符串里面要表示引号怎么办呢?,可以发现 path = r"\\123\"xxx" 是可以的,那用raw字符串岂不是有局限性?不过raw在设计之初就是用来支持正则表达式的,而在正则里面反斜杠是转义字符,所以不可能出现在字符串的末尾的,所以建议不要图方便在其他的地方使用raw。

时间: 2024-10-02 09:21:42

python 正则表达式 反斜杠(/)的麻烦和陷阱的相关文章

python 正则表达式 反斜杠(/)的麻烦和陷阱_正则表达式

要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四个"\\\\",完美匹配. 复制代码 代码如下: import re re_str_patt = "\\\\" reObj = re.compile(re_str_patt)

java正则表达式匹配斜杠

在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String textString = new String ("\\\&q

python过滤掉字符串的反斜杠,及各种符号,包含双引号

问题描述 python过滤掉字符串的反斜杠,及各种符号,包含双引号 某字符串s = abcde/uy"h%fgj*fg+we 我需要过滤掉其中的各种字符,包括反斜杠和双引号 我用正则表达式实现时不清楚如何将其中的反斜杠也过滤掉,以及过滤掉双引号. 我的语句re.split("/|%|*|+", s) 解决方案 "|/|%|*|+"

Python中的左斜杠、右斜杠(正斜杠和反斜杠)_python

首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下例子: path = r"C:\Windows\temp\readme.txt" path1 = r"c:\windows\temp\readme.txt" path2 = "c:

方法-java可以把点号转换成反斜杠吗

问题描述 java可以把点号转换成反斜杠吗 RT: 问题描述 String s="cn.sun.dao"; String d=s.replaceAll(".","/");//这个方法实际上匹配的是正则表达式? 对点号进行替换会有问题,其他的没什么问题.有没有其他方法可以替换点号啊! 解决方案 上当了,回复后CSDN会将两个反斜杠转换成一个,上面回复的内容中都出现了这个问题,请以这个答案为准. replaceAll方法中替换支持正则表达式,你的代码

掌握C++编程中反斜杠续行符的使用方法_C 语言

1) 用在宏定义中: #define CV_ARE_SIZES_EQ(mat1, mat2) \ ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols) 2) 用在printf中,有时候printf中语句太长,需要切分,则需用到反斜杠: 3) 用"//"只能注释当前行的语句,想要将下一行一起注释掉,则可以在该行最后加上反斜杠. 另外,反斜杠除了强制换行的作用之外,还有转义符的意

PHP在引号前面添加反斜杠的原因及PHP去除反斜杠的办法,三种办法关闭php魔术引号

一般空间商提供的服务器空间默认PHP 指令 magic_quotes_gpc是on的,也就是打开的.这时候就可以用stripslashes() 函数删除自动添加的反斜杠.用法就是:比如包含字符串的变量是$str,那么就用stripslashes() 函数处理一下这个字符串:stripslashes($str),输出的结果就是去掉反斜杠的. 如果遇到输出的结果中包含反斜杠的,可对输出内容用stripslashes()函数处理一下,即$str=stripslashes($str),保存即可将输出内容

char-字符串中反斜杠加数字

问题描述 字符串中反斜杠加数字 如char str[]="ssswt111w"中,11是指11还是1和字符1? 解决方案 你看,并不能解析为1或者是11,而是被解析为一个符号 解决方案二: 早期8进制最多可以有3个字符如今可能更多 就是 00 后面加数字很不直观, 因为如今很少用8进制. 解决方案三: 反斜杠后接数字0-7表示八进制数 字符串里的八进制表示一般是用12或3个数字所以11 表示0x09 解决方案四: '1'是转义字符,是ASCII码为1的字符,即笑脸.'141' 141是

VS2013 C++反斜杠怎么无法输入啊?

问题描述 VS2013 C++反斜杠怎么无法输入啊? 用VS2013 C++最近才发现这个问题,用来输入反斜杠无效. 代码如下:(我想在一字符串里输入:E:yeyingying) WCHAR szPath[]=L"E:yeyingying"; 以上代码在下一行断点停下后看变量里的内容居然是:E:yeyingying. 把代码改成如下: WCHAR szPath[]=L"E:yeyingying"; 再断点看内容居然是:E:yeyingying. 不管怎么样都无法输入