我尝试了许多模式,但无法获得正确的结果。range
当行开头有关键字时,我只想匹配浮点数。我的问题是后面range
可以跟一个:
, :
, :
, :
, :
, 等等。
我最好的尝试是使用两种模式:
#1。(?i)(?<=range[: ])[:a-zA-Z0-9.$ -]+
#2。[0-9.]+
首先使用模式#1 运行正则表达式,然后获取模式#1 的输出并使用模式#2 再次运行正则表达式
我怎样才能在一个模式中做到这一点?非常感谢
还有一件事:我的代码是 Python
输入: range: $0.82
–> 预期输出:0.82
输入: range:0.82
–> 预期输出:0.82
输入: range: 0.82 - 0.85
–> 预期输出:0.82
,0.85
输入: range : 0.82 - 0.85
–> 预期输出:0.82
,0.85
输入: range : 0.82 - 0.85
–> 预期输出:0.82
,0.85
输入: range 0.82 0.85
–> 预期输出:0.82
,0.85
table = df.reset_index().groupby(pd.Grouper(key=’index’, freq=‘1D’))
如果您可以使用 Python正则表达式 PyPi 模块,那么您可以多次出现:
(?<=^range\b[\s:$-\d.]*)\d+(?:\.\d+)?
解释
(?<=
正面向后看,断言左边是
^range\b``range
在字符串的开头匹配[\s:$-\d.]*
可以选择匹配可能介于两者之间的所有允许的字符
)
关闭后向断言
\d+(?:\.\d+)?
将 1+ 位数字与可选的小数部分匹配
例子
import regex
strings = [
"range: $0.82",
"range:0.82",
"range: 0.82 - 0.85",
"range : 0.82 - 0.85",
"range : 0.82 - 0.85",
"range 0.82 0.85"
]
pattern = r"(?<=^range\b[\s:$-\d.]*)\d+(?:\.\d+)?"
for s in strings:
print (regex.findall(pattern, s))
输出
['0.82']
['0.82']
['0.82', '0.85']
['0.82', '0.85']
['0.82', '0.85']
['0.82', '0.85']