我已经尝试了一些前瞻性的可能性来找到字符串中的模式,但我被困在这里,因为我必须检查多个条件。
我有一个像
这样的字符串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
等,因为数字组合后会有一个空格。
我希望正则表达式匹配任何数字组合,例如5.75
,10.25
等,即使它用括号或引号括起来。但我只需要数字。它可以在“年”之前或之后。在Python中使用正则表达式检查多种可能性的最佳方法是什么?
答案 0 :(得分:1)
这可能有用。
更新
您收到“无效表达”错误 除非python不支持群集组中的修饰符,否则我看不到任何无效 您可以尝试取出case修饰符并将其添加到regex函数中的options部分。
然后试试这个:
(?:\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
)