Python正则表达式匹配字符串

时间:2017-08-07 21:36:19

标签: python regex

字符串中模式的正则表达式是什么:

window.history.pushState({}, null, '/new_path');
window.dispatchEvent(new CustomEvent('location-changed'));

因此,正则表达式需要识别四个字段:描述,优先级,名称和日期。

我成功地将第一个字符串与:

匹配
description details #lo firstname lastname 29 March 2017

但是,我无法弄清楚如何匹配其他领域。

感谢。

1 个答案:

答案 0 :(得分:1)

好像你可以使用

^(?P<description>[^#]+?)\s+#(?P<priority>\w+)\s+(?P<name>.*?)\s+(?P<date>\d.*)$

请参阅regex demo

<强>详情

  • ^ - 字符串的开头(与re.match / re.fullmatch一起使用时隐含)
  • (?P<description>[^#]+?) - 组“描述”:尽可能少的#以外的一个或多个字符
  • \s+ - 1+空格
  • # - #字符
  • (?P<priority>\w+) - 匹配1 +字词组的“优先级”
  • \s+ - 1+空格
  • (?P<name>.*?) - 除了换行符之外的任何0 +字符,尽可能少
  • \s+ - 1+空格
  • (?P<date>\d.*) - 组“日期”:数字和行的其余部分
  • $ - 字符串结尾(隐含在re.fullmatch

注意:{3.}}在Python 3.x中可用。

Python demo

re.fullmatch

输出:

import re
rx = r"(?P<description>[^#]+?)\s+#(?P<priority>\w+)\s+(?P<name>.*?)\s+(?P<date>\d.*)$"
ss = ["description details #lo firstname lastname 2017-03-29", "description details #lo firstname lastname 2017 June 29"]
for s in ss:
    m = re.match(rx, s)
    if m:
        print(m.groupdict())