我有一句话:
"Fourth-quarter 2021 net earnings per share (EPS) of $1.26, compared with 2020 EPS of $1.01; Fourth-quarter 2021 adjusted EPS of $1.11, down 25.5 percent compared with 2020 adjusted EPS of $1.49"
并且希望在第一个子串"0"之后得到数字$1.11;调整后的EPS";。
我能提供的最好的正则表达式是:
re.search("^.*Adjusted EPS.*?($d+.d+).*", text,re.IGNORECASE).group(1)
但这在第二次出现"0"之后给了我数字$1.49;调整后的EPS";。
如何修改搜索以获得1.11美元的数字?
这个正则表达式字符串应该可以工作。/adjusted EPS of ?($d+.d+)/g
输入:
Fourth-quarter 2021 net earnings per share (EPS) of $1.26, compared with 2020
EPS of $1.01; Fourth-quarter 2021 adjusted EPS of $1.11, down 25.5 percent
compared with 2020 adjusted EPS of $1.49
输出:调整后每股收益1.11美元,调整后每股收益1.49美元
编辑:删除Regex字符串末尾的g
,只查找一个匹配项。
您可以使用此模式来查找;调整后的EPS";并且只允许一个"$"在它和线的末端之间。
/adjusted EPS[^$]+($d+.d+)[^$]+$/gm
没有结尾的图案是
adjusted EPS[^$]+($d+.d+)[^$]+$
这里的问题是贪婪正则表达式,您刚开始使用它:
^.*Adj ...
^
表示字符串的开始。贪婪的.*
";吃";尽可能多的字符直到最后一个";调整后的EPS";
这里有两种解决方案,要么使其成为非贪婪(即懒惰(^.*?Adj ...
,要么完全删除^.*
——我认为没有使用它