Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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_Html_Regex - Fatal编程技术网

Python 如何使用正则表达式提取包含元素的

Python 如何使用正则表达式提取包含元素的,python,html,regex,Python,Html,Regex,? 让我首先展示我将要处理的3种不同类型的字符串: "<h1>Money Shake</h1><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>" "<h1>Money Shake</h1><p>Posted by G

? 让我首先展示我将要处理的3种不同类型的字符串:

"<h1>Money Shake</h1><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"

"<h1>Money Shake</h1><p>Posted by Gordon Gekko</p><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"

"<h1>Money Shake</h1><p>Posted by Gordon Gekko</p><p>They're great</p><p>Yield: KA-CHING</p><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"

只需使用适当的HTML解析器。它将比正则表达式更直观,并且实际会起作用:

# May need to install it:
# pip install BeautifulSoup4

from bs4 import BeautifulSoup

soup = BeautifulSoup("""
    <h1>Money Shake</h1>
    <p>Posted by Gordon Gekko</p>
    <p>They're great</p>
    <p>Yield: KA-CHING</p>
    <p>
        Money
        <br>
        Money
        <br>
        MORE MONEY
    </p>
    <p>Take money and stuff in blender.</p>
    <p>Blend.</p>
""")

def get_ingredients(soup):
    for p in soup.find_all('p'):
        if p.find('br'):
            return p.find_all(text=True)

我搞砸了什么?我不想主观判断,但这里的共识是HTML和正则表达式不能混合使用。甚至在搅拌机里。看看[^

]并不是你想象的那样。它不是任何p/p符号。我想你需要什么

我不是在开玩笑。虽然我不像你们这些专家,但我就是这么想的。我见过1732348,但在这种情况下,把它扔给我并没有多大帮助。我知道你可能会认为我是因为html标签中的内容而被拖走的。好的,我被指派去查看一个食谱数据库,并分离出配料和说明书。这就是我这么做的原因。我不想提出一个正确的食谱,因此我做了这个摇钱树的例子。仅此而已。请不要再攻击新手了。我正在尽我最大的努力学习。伙计们,我想你们可能在这件事上做得太过火了。这不是你想象中的那个人。嗨,Blender,这太棒了!非常感谢。我不知道如何把这变成我想做的事情。好的,那么我本来想做的是,获取字符串,然后编写一个csv文件,其中包含列:“标题”、“垃圾”、“配料”、“说明”,并将这些列分别拉到各自的列中,即Gordon Gekko发布的“标题”下的“摇钱”,它们很棒,等等,抱歉这么麻烦。我感谢你的帮助。我是一个noob,这一点很清楚,因为我甚至无法在评论中格式化我的回复,或者我想回复的内容可能没有这样做的方法@搅拌机我将编辑我的问题,让你看看我的想法。
re.search(r'<p>[^</p>](.*)<br>(.*?)</p>', string, re.I)
"<p>Money<br>Money<br>MORE MONEY</p>"
"<p>They're great</p><p>Yield: KA-CHING</p><p>Money<br>Money<br>MORE MONEY</p>"
def get_ingredients(soup):
   for p in soup.find_all('p'):
       if p.find('br'):
           return p

ingredients = get_ingredients(soup)

p_list = soup.find_all('p')

ingredient_index = p_list.index(ingredients)

junk = []

junk += p_list[:ingredient_index]

instructions = []

instructions += p_list[ingredient_index+1:]
# May need to install it:
# pip install BeautifulSoup4

from bs4 import BeautifulSoup

soup = BeautifulSoup("""
    <h1>Money Shake</h1>
    <p>Posted by Gordon Gekko</p>
    <p>They're great</p>
    <p>Yield: KA-CHING</p>
    <p>
        Money
        <br>
        Money
        <br>
        MORE MONEY
    </p>
    <p>Take money and stuff in blender.</p>
    <p>Blend.</p>
""")

def get_ingredients(soup):
    for p in soup.find_all('p'):
        if p.find('br'):
            return p.find_all(text=True)