【问题标题】:Regex multiline syntax help (python)正则表达式多行语法帮助(python)
【发布时间】:2016-07-28 15:39:10
【问题描述】:

我正在努力使用多个匹配项进行多行正则表达式。

我的数据由换行符/换行符分隔,如下所示。如果我单独测试,我的模式与这些行中的每一行匹配。我怎样才能匹配所有出现的事件(特别是数字?

我读到我可以/应该以某种方式使用 DOTALL(可能使用 MULTILINE)。这似乎与任何字符(也包括换行符)匹配,但不确定任何最终的副作用。不想让它匹配一个整数或其他东西,最后给我格式错误的数据。 任何有关这方面的信息都会很棒。

我真正需要的是一些帮助来使这个示例代码工作。我只需要从数据中获取数字。

当我在前一个案例中只需要一个特定匹配并且不完全确定我现在应该使用哪个函数(finditer、findall、search 等)时,我使用了 re.fullmatch。

感谢您的任何帮助:)

data = """http://store.steampowered.com/app/254060/
http://www.store.steampowered.com/app/254061/
https://www.store.steampowered.com/app/254062
store.steampowered.com/app/254063
254064"""

regPattern = '^\s*(?:https?:\/\/)?(?:www\.)?(?:store\.steampowered\.com\/app\/)?([0-9]+)\/?\s*$'

evaluateData = re.search(regPattern, data, re.DOTALL | re.MULTILINE)
if evaluateString2 is not None:
    print('do stuff')
else:
    print('found no match')

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:
    import re
    p = re.compile(ur'^\s*(?:https?:\/\/)?(?:www\.)?(?:store\.steampowered\.com\/app\/)?([0-9]+)\/?\s*$', re.MULTILINE)
    test_str = u"http://store.steampowered.com/app/254060/\nhttp://www.store.steampowered.com/app/254061/\nhttps://www.store.steampowered.com/app/254062\nstore.steampowered.com/app/254063\n254064"
    
    re.findall(p, test_str)
    

    https://regex101.com/r/rC9rI0/1

    这给出了[u'254060', u'254061', u'254062', u'254063', u'254064']

    您是否要返回那些特定的整数?

    【讨论】:

    • 是的,我只是想返回那些整数。如果我愿意,我可以稍后重建网址。
    • 供参考:我只是将您的正则表达式和数据插入到 regex101.com,然后我添加了 gm 修饰符,然后我点击生成代码并复制粘贴 python 部分。对于初学者正则表达式程序员来说,它是一个非常有用的工具。
    • 天哪。我实际上是在使用该站点来构建正则表达式模式,并且我正在四处寻找与这些类似的修饰符,但从未找到它们...... >_
    【解决方案2】:

    re.search 在第一次出现时停止

    你应该使用它

    re.findall(regPattern, data, re.MULTILINE) ['254060', '254061', '254062', '254063', '254064']

    注意:搜索对我不起作用(python 2.7.9)。它只返回第一行数据

    【讨论】:

    • 奇怪,我确信我已经尝试过了,但收到了一些模糊的错误。谢谢你:)
    【解决方案3】:

    / 没有特殊含义,因此您不必转义它(在非原始字符串中,您必须转义每个 \

    试试这个

    regPattern = r'^\s*(?:https?://)?(?:www\.)?(?:store\.steampowered\.com/app/)?([0-9]+)/?\s*$'
    

    【讨论】:

    • 谢谢你,我会改变我的模式:)
    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2023-03-26
    • 2021-08-29
    相关资源
    最近更新 更多