python正则表达式重新编译匹配

python正则表达式重新编译匹配,python,regex,Python,Regex,我试图在python中使用正则表达式进行匹配: http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg 在以下字符串中: http://www.mymaterialssite.com','http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Pho

我试图在python中使用正则表达式进行匹配:

http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg
在以下字符串中:

http://www.mymaterialssite.com','http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'
我的代码是这样的:

temp="http://www.mymaterialssite.com','http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'"
dummy=str(re.compile(r'.com'',,''(.*?)'',,''Model Photo').search(str(temp)).group(1))
'.com\',\'(.*?)\',\'Model Photo'
我不认为这个伪码是正确的&我不确定如何在regex re.compile命令中转义单引号和双引号

我试着用谷歌搜索这个问题,但找不到任何相关的

希望您能就此提供指导

谢谢。

试试三重引号:

import re
tmp=""".*http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg.*"""
str="""http://www.mymaterialssite.com\'\,\'http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'"""
x=re.match(tmp,str)
if x!=None:
    print x.group()
此外,您在模式的开头和结尾都缺少了。*。我也加了这个。

试试三重引号:

import re
tmp=""".*http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg.*"""
str="""http://www.mymaterialssite.com\'\,\'http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'"""
x=re.match(tmp,str)
if x!=None:
    print x.group()

此外,您在模式的开头和结尾都缺少了。*。我也添加了这一点。

如果使用双引号创建字符串,则不需要转义逗号,也不需要转义单引号:

>>> dummy=re.compile(r".com','(.*?)','Model Photo").search(temp).group(1)
>>> print dummy
http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg
请注意,我还删除了一些不必要的str调用,如果您确实需要转义单引号或双引号,并说您的字符串同时包含这两个引号,请使用如下反斜杠:

temp="http://www.mymaterialssite.com','http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'"
dummy=str(re.compile(r'.com'',,''(.*?)'',,''Model Photo').search(str(temp)).group(1))
'.com\',\'(.*?)\',\'Model Photo'

正如mykhal在评论中指出的那样,这在正则表达式中不起很好的作用,因为您不能再使用原始字符串r'…'文本。更好的解决方案是按照其他建议使用三引号字符串。

如果使用双引号创建字符串,则不需要转义逗号,也不需要转义单引号:

>>> dummy=re.compile(r".com','(.*?)','Model Photo").search(temp).group(1)
>>> print dummy
http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg
请注意,我还删除了一些不必要的str调用,如果您确实需要转义单引号或双引号,并说您的字符串同时包含这两个引号,请使用如下反斜杠:

temp="http://www.mymaterialssite.com','http://images.mymaterials.com/images/steel-images/small/steel/steel800/steel800-2.jpg','Model Photo'"
dummy=str(re.compile(r'.com'',,''(.*?)'',,''Model Photo').search(str(temp)).group(1))
'.com\',\'(.*?)\',\'Model Photo'

正如mykhal在评论中指出的那样,这在正则表达式中不起很好的作用,因为您不能再使用原始字符串r'…'文本。更好的解决方案是像其他答案所建议的那样使用三重引号字符串。

在Python中处理包含转义字符和引号的字符串最简单的方法是将字符串三重双引号并在其前面加上r。例如:

my_str = r"""This string would "really "suck"" to write if I didn't
 know how to tell Python to parse it as "raw" text with the 'r' character and
 triple " quotes. Especially since I want \n to show up as a backlash followed
 by n. I don't want \0 to be the null byte either!"""
r表示将转义字符作为文字。三重双引号防止单引号、双引号和双引号过早结束字符串

编辑:我扩展了示例以包括\0和\n之类的内容。在普通字符串而非原始字符串中,转义字符表示下一个字符具有特殊含义。例如\n表示换行符。如果您确实希望字符串中的字符\后跟n,则必须写入\\n,或者只使用原始字符串,如我在上面的示例中所示

您还可以在此处阅读Python文档中的字符串文字:

对于初学者: 复杂的解释:
在Python中处理包含转义字符和引号的字符串最简单的方法是将字符串三倍双引号并在其前面加上r。例如:

my_str = r"""This string would "really "suck"" to write if I didn't
 know how to tell Python to parse it as "raw" text with the 'r' character and
 triple " quotes. Especially since I want \n to show up as a backlash followed
 by n. I don't want \0 to be the null byte either!"""
r表示将转义字符作为文字。三重双引号防止单引号、双引号和双引号过早结束字符串

编辑:我扩展了示例以包括\0和\n之类的内容。在普通字符串而非原始字符串中,转义字符表示下一个字符具有特殊含义。例如\n表示换行符。如果您确实希望字符串中的字符\后跟n,则必须写入\\n,或者只使用原始字符串,如我在上面的示例中所示

您还可以在此处阅读Python文档中的字符串文字:

对于初学者: 复杂的解释:
如果在Python中使用与单引号含义相同的双引号,则根本不需要转义。。在这种情况下。您甚至可以使用字符串文字,而不使用起始字符r,因为这里没有任何反斜杠

re.compile(".com','(.*?)','Model Photo")

如果在Python中使用与单引号含义相同的双引号,则根本不需要转义。。在这种情况下。您甚至可以使用字符串文字,而不使用起始字符r,因为这里没有任何反斜杠

re.compile(".com','(.*?)','Model Photo")

注意,反斜杠实际上是r'…'字符串中的反斜杠!:注意,反斜杠实际上是r'…'字符串中的反斜杠!:谢谢8217系列。那太完美了。你能解释一下把转义字符当作字面意思是什么吗?我不明白。转义字符是什么意思?@James,我扩展了示例字符串以包括\0和\n之类的内容。我还描述了这些是什么。再次感谢您的解释。这确实有助于dmn文档有时令人困惑!。接受你的回答。@James,不客气。我在回答Python文档时添加了一些链接。其中一页可能会让人很困惑,但另一页是Python教程的一部分,面向初学者。我现在将浏览教程!。谢谢8217系列。那太完美了。你能解释一下把转义字符当作字面意思是什么吗?我不明白。转义字符是什么意思?@James,我扩展了示例字符串以包括\0和\n之类的内容。我还描述了
是的。再次感谢您的解释。这确实有助于dmn文档有时令人困惑!。接受你的回答。@James,不客气。我在回答Python文档时添加了一些链接。其中一页可能会让人很困惑,但另一页是Python教程的一部分,面向初学者。我现在将浏览教程!。是否确实不希望使用结果=输入字符串.split','[1]?是否确实不希望使用结果=输入字符串.split','[1]?