Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式查找后跟点的数字_Python_Regex - Fatal编程技术网

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]
详细信息

  • (?)
    -如果在当前位置的左侧有一个除空格和
  • ([0-9]+)
    -第1组:一个或多个数字(它将是
    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']