正则表达式,用于重复出现的短语

时间:2019-03-18 00:16:09

标签: python regex

我有以下短语:

05/30/2016 07:02 AM (GMT+02:00) added by XXX YYY (PID-000301):\tSome_alphanum_text_Some_alphanum_text_Some_alphanum_text_Some_alphanum_text\t\t*************************************************************************************************\t05/12/2016 02:03 PM (GMT+02:00) added by ZZZ AAA (PID-000301):\tSome_other_alphanum_text_Some_other_alphanum_text_Some_other_alphanum_text_Some_other_alphanum_text\t\t

我想写一个RegEx,它只为我提供“ Some_alphanum_text”和“ Some_other_alphanum_text”的信息。

到目前为止,我正在尝试像这样的运气:

r'(?:.+\(PID-\d{6}\):)(.+)'

但这只是给我'Some_other_alphanum_text'的出现。 我需要从这个混乱的文本中找出两个以上的唯一字符串。有什么想法吗?

4 个答案:

答案 0 :(得分:0)

您需要将.+替换为仅与您要返回的内容匹配的内容。由于您只想匹配字母数字文本,因此请使用\w而不是.

r'(?:\(PID-\d{6}\):)\s*(\w+)'

您需要在第二组之前输入\s*,因为字母数字文本之前的空格将与\w+不匹配。

您一开始也不需要.+。比赛将在找到PID的地方开始。

DEMO

答案 1 :(得分:0)

我相信您需要此正则表达式:

\(PID-\d{6}\):\\t(.+?)(?:\\t){2}

regex101

答案 2 :(得分:0)

我没有将正则表达式区域更改为代码块,因此它无法正常工作。

现在可以了!您应该考虑的一件事是可能没有'\ t'。但是

每个匹配的文本都采用日期格式,例如05/12/2016 02:03或结束。

\(PID-\d{6}\)[\n\r\t\s]*:(?:.|[\n\r\t\s])*?(?=[0-9]{2}\/[0-9]{2}\/[0-9]{4}[\n\r\t\s]*[0-9]{2}:[0-9]{2}|$)

enter image description here

答案 3 :(得分:0)

我认为您可以使用它来查找"\t" s之间出现的所有文本实例 enter image description here