正则表达式多行语法帮助(python)

时间:2016-07-28 15:39:10

标签: python regex python-3.x

我正努力做多场比赛的多线正则表达式。

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

我已经读过,我可以/应该以某种方式使用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')

3 个答案:

答案 0 :(得分:3)

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']

您是否尝试返回这些特定的整数?

答案 1 :(得分:1)

/没有特殊含义,所以你不必逃避它(在非原始字符串中,你必须每个\转义

试试这个

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

答案 2 :(得分:1)

re.findall(regPattern, data, re.MULTILINE) ['254060', '254061', '254062', '254063', '254064'] 在第一次出现时停止

你应该使用这个intead

Console.WriteLine("This is my number {0:N1"},z);

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