我正在尝试在参考文献列表中找到参考文献的索引。让我举例说明:
这是我从网站上抓取的参考文献列表:
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>"
我认为我可以使用以下方法获取参考索引(即“ 1.”和“ 2。”)。
result = list(map(int, [e for e in re.split("[^0-9]", ref) if e != '']))
但是我得到所有数字:[1, 2003, 729537528, 2, 2019]
我如何仅获取参考索引列表,即[1, 2]
,我想一种方法是找到数字后跟一个点,但是我不知道怎么做。
答案 0 :(得分:1)
您可以使用
list(map(int, re.findall(r"(?<![^\s>])([0-9]+)\. ", ref)))
请参见Python demo:
import re
p_text="""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>"""
result = list(map(int, re.findall(r"(?<![^\s>])([0-9]+)\. ", p_text)))
print(result) # => [1, 2]
详细信息
(?<![^\s>])
-如果紧接当前位置左侧的字符不是空格和>
([0-9]+)
-第1组:一个或多个数字(它将是re.findall
的输出值).
-一个.
和一个空格(用\s
替换常规空格以匹配任何空白)。请参见regex demo。
答案 1 :(得分:1)
您可以尝试以下方法:
import re
o = re.findall(r'[>|\s](\d{1})\.', ref)
print(o)
将输出:
['1', '2']
您可能需要定义更多的结构,因为仅数字(用\ d捕获的数字)和点也将捕获“ 8”。 ISBN号末尾:ISBN:0729537528。在这里,我使用了一些字符(在本示例中)有助于区分这两种情况。一个引用前面有一个'>',另一个引用前面有一个空格(\ s)。
答案 2 :(得分:0)
您必须“转义”句号,例如“ [0-9] * \”。应该管用。那太过头了,所以可能有点不对劲。我也将由您自己决定为什么存在*。
请注意,Python中的Regex表达式与其他实现略有不同。有关确定的信息,请参见:
请参阅:https://docs.python.org/3/library/re.html
这表明您应该从这里开始:
https://docs.python.org/3/howto/regex.html#regex-howto
这是库页面的相关部分(大约1/3):
特殊序列由'\'和下面列表中的字符组成。如果普通字符不是ASCII数字或ASCII字母,则结果RE将与第二个字符匹配。例如,\ $与字符“ $”匹配。
对于等效的python 2.x页面,请更改页面左上角的版本选择器。