正则表达式查找多个匹配项
Regex to find multiple matches
我已经尝试了一些先行的可能性来在字符串中找到模式,但我被困在这里,因为我必须检查多个条件。
我有一个像
这样的字符串
string = ''' i was behind the bars for (5.75) years '''
string2 = ''' I travelled for 6 months in Switzerland and some years say 5.2 in England '''
re.search(r'(?=\byears\b)([/d]+\S+)',str,re.I)
这是我在多年后尝试获取日期; /S+
用于得到5.33
、5.44
等,因为数字组合后会有一个space。
我想要一个正则表达式来匹配任何数字组合,如 5.75
、10.25
等,即使它被括在方括号或引号中。但我只需要数字。它可以在单词 "years" 之前或之后。在 Python 中使用正则表达式检查多种可能性的最佳方法是什么?
这可能有用。
更新
您遇到 'invalid expression' 错误。
除非 python 不支持集群组中的修饰符,否则我没有看到任何无效内容。
您可能会尝试取出大小写修饰符并将其添加到正则表达式函数的选项部分。
然后试试这个:
(?:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)
原文:
# (?i:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)
(?i:
\b
( # (1 start), Digits
\d+
(?: \. \d* )?
| \. \d+
) # (1 end)
\b
.*?
(?: # 0, 1 or 2 lines
(?: \r? \n )
.*?
){0,2}
\b years? \b # Followed by "year(s)"
| # or --
\b years? \b # "year(s)"
.*?
(?: # 0, 1 or 2 lines
(?: \r? \n )
.*?
){0,2}
\b
( # (2 start), Followed by Digits
\d+
(?: \. \d* )?
| \. \d+
) # (2 end)
\b
)
我已经尝试了一些先行的可能性来在字符串中找到模式,但我被困在这里,因为我必须检查多个条件。
我有一个像
这样的字符串string = ''' i was behind the bars for (5.75) years '''
string2 = ''' I travelled for 6 months in Switzerland and some years say 5.2 in England '''
re.search(r'(?=\byears\b)([/d]+\S+)',str,re.I)
这是我在多年后尝试获取日期; /S+
用于得到5.33
、5.44
等,因为数字组合后会有一个space。
我想要一个正则表达式来匹配任何数字组合,如 5.75
、10.25
等,即使它被括在方括号或引号中。但我只需要数字。它可以在单词 "years" 之前或之后。在 Python 中使用正则表达式检查多种可能性的最佳方法是什么?
这可能有用。
更新
您遇到 'invalid expression' 错误。
除非 python 不支持集群组中的修饰符,否则我没有看到任何无效内容。
您可能会尝试取出大小写修饰符并将其添加到正则表达式函数的选项部分。
然后试试这个:
(?:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)
原文:
# (?i:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b)
(?i:
\b
( # (1 start), Digits
\d+
(?: \. \d* )?
| \. \d+
) # (1 end)
\b
.*?
(?: # 0, 1 or 2 lines
(?: \r? \n )
.*?
){0,2}
\b years? \b # Followed by "year(s)"
| # or --
\b years? \b # "year(s)"
.*?
(?: # 0, 1 or 2 lines
(?: \r? \n )
.*?
){0,2}
\b
( # (2 start), Followed by Digits
\d+
(?: \. \d* )?
| \. \d+
) # (2 end)
\b
)