re.search:通过2个例子

时间:2015-08-13 15:57:11

标签: regex string python-3.x

if re.search("Vitamin B2 (Riboflavin)","Vitamin B2 Riboflavin,Riboflavin,Vitamin B2,Vitamin B2 (Riboflavin)") : print("ok")

输出: ok

if re.search("Crude protein (min.)","Crude protein,protein,Protein,Protein    (crude),Crude protein (min.)") : print("ok")

输出:none

为什么会这样?我没有看到这两个例子之间的任何格式。或主要差异,如空格,昏迷或其他。 为什么这两个例子如此不同。

更多细节:我只想知道来自表A(例如列表A)"Crude protein (min.)"的字符串是否来自表B中的字符串,如"Crude protein,protein,Protein,Protein (crude),Crude protein (min.)" (eG列表B) 但实际上我已经构建了表B,以便它包含表A中的每个字符串,所以我真的希望每次都能使用这些例子。

2 个答案:

答案 0 :(得分:1)

().是特殊的正则表达式元字符,需要在正则表达式中进行转义:

if re.search(r"Crude protein \(min\.\)","Crude protein,protein,Protein,Protein    (crude),Crude protein (min.)") : print("ok")
...
ok

你的正则表达式:

Crude protein (min.)

正在尝试匹配minCrude protein之后的任何字符以及空格。它不会与文字()匹配,因为(min.)表示正则表达式中的捕获组。

编辑您可以使用re.escape为您转义所有特殊字符:

if re.search(re.escape("Crude protein (min.)"),"Crude protein,protein,Protein,Protein    (crude),Crude protein (min.)") : print("ok")
...
ok

答案 1 :(得分:1)

if re.search("Vitamin B2 (Riboflavin)","Vitamin B2 Riboflavin,Riboflavin,Vitamin B2,Vitamin B2 (Riboflavin)") : print("ok")

打印正常,因为Vitamin B2 (Riboflavin)匹配名为捕获组的Vitamin B2 Riboflavin (),该捕获组捕获与捕获组内存在的模式匹配的文本,

其中,

if re.search("Crude protein (min.)","Crude protein,protein,Protein,Protein    (crude),Crude protein (min.)") : print("ok")

失败,因为它无法找到Crude protein min.点表示任何字符。

所以你必须为了匹配它的字面形式而逃避所有的正则表达式特殊元字符。 \(\)\.