Python 使用正则表达式查找后跟点的数字
我试图在引用列表中找到引用的索引。让我举例说明: 这是我从网站上搜刮的参考资料列表:Python 使用正则表达式查找后跟点的数字,python,regex,Python,Regex,我试图在引用列表中找到引用的索引。让我举例说明: 这是我从网站上搜刮的参考资料列表: ref = "<p class="references" style="font-size:15px">1. Mcminn. (2003). Last's Anatomy. Elsevier Australia. ISBN:0729537528. <a href="http://books.google.com/books?vid=ISBN0729537528">Read it at G
ref = "<p class="references" style="font-size:15px">1. Mcminn. (2003). Last's Anatomy. Elsevier Australia. ISBN:0729537528. <a href="http://books.google.com/books?vid=ISBN0729537528">Read it at Google Books</a> - <a href="http://www.amazon.com/gp/product/0729537528">Find it at Amazon</a><br>
2. Netter, F. H. (2019). Atlas of human anatomy. Philadelphia, PA: Elsevier.</p>"
但我得到了所有的数字:[120032953752812019]
如何只获取参考索引列表,即[1,2]
我猜有一种方法是查找后跟一个点的数字,但我不知道如何获取。您可以使用
list(map(int, re.findall(r"(?<![^\s>])([0-9]+)\. ", ref)))
list(map(int,re.findall(r“(?])([0-9]+)\”,ref)))
见:
重新导入
p_text=“”ref=1.麦克明(2003).最后的解剖.澳大利亚爱思唯尔.ISBN:0729537528.-
2.内特,F.H.(2019),《人体解剖学地图集》,宾夕法尼亚州费城:爱思唯尔。
“”“
结果=列表(映射(int,re.findall(r“(?])([0-9]+)\”,p\u text)))
打印(结果)#=>[1,2]
详细信息
-如果在当前位置的左侧有一个除空格和(?)
-第1组:一个或多个数字(它将是([0-9]+)
的输出值)re.findall
-a
和一个空格(将常规空格替换为
以匹配任何空格)\s
import re
o = re.findall(r'[>|\s](\d{1})\.', ref)
print(o)
将输出:
['1', '2']
您可能需要定义更多的结构,因为只有数字(由\d捕获的数字)和点也将捕获“8”。在ISBN编号的末尾:ISBN:0729537528。在这里,我使用了几个字符(在本例中)来帮助区分这两种情况。一个引用前面有一个“>”,另一个引用前面有一个空格(\s)。您必须“转义”句点,这样“[0-9]*\”之类的内容才能起作用。这是我的想法,所以可能有点错误;我也会让你去弄清楚为什么会有
请注意,Python中的正则表达式与其他实现略有不同。有关最终信息,请参见:
见:
建议您从这里开始:
以下是图书馆页面的相关部分(大约向下1/3):
特殊序列由“\”和下表中的一个字符组成。如果普通字符不是ASCII数字或ASCII字母,则生成的RE将与第二个字符匹配。例如,\$与字符“$”匹配
对于eqivalent python 2.x页面,更改页面左上角的版本选择器。尝试
result=list(map(int,re.findall(r“([0-9]+)\”,p.text))
谢谢!我使用'p.text'而不是'ref'作为变量时出错。我在上面更正了它。
import re
o = re.findall(r'[>|\s](\d{1})\.', ref)
print(o)
['1', '2']