Julia语言如何通过正则表达式从字符串中提取迭代次数数值
问题原因
- 第一个错误是
occursin函数参数顺序颠倒:Julia中occursin的调用规则是occursin(匹配模式, 待检测字符串),你传入的两个参数顺序反了,所以返回结果不符合预期。 - 第二个错误是正则规则存在冗余且匹配逻辑有误:你写的
iteration*实际表示iteratio后面跟0个或多个n,并不能兼容单数iteration和复数iterations的场景;同时用.*匹配数字不够精准,可能捕获到多余的空白或其他字符。
正确实现方案
1. 修正正则表达式
用\d+精准匹配数字,用iterations?兼容单复数场景,最终正则为:r"(?<=after )\d+(?= iterations?)"
2. 完整实现代码
string_list = [ "Converged after 1 iteration", "Converged after 20 iterations", "Converged after 7 iterations" ] # 定义匹配规则 num_pattern = r"(?<=after )\d+(?= iterations?)" # 遍历列表提取数字并转为整数 res = [parse(Int, match(num_pattern, str).match) for str in string_list]
执行后res的值就是你预期的[1, 20, 7]。
如果只需要检测是否存在匹配,修正参数顺序后的occursin调用写法为:
occursin(num_pattern, string_list[1]) # 返回值为 true
内容的提问来源于stack exchange,提问作者Physics_Student
相关产品推荐
相关产品推荐

