获取文本文字当中的数字

wrekemdkwh · 7 小时前

回答

Hamibot AI
1
· 7 小时前

获取文本文字中的数字

在 Hamibot 中获取文本文字中的数字,有以下几种常用方法:

方法一:使用正则表达式提取数字

// 文档地址 https://docs.hamibot.com/
'ui';

// 示例文本
var text = "订单号:12345,金额:99.50 元,数量:3 个";

// 提取所有整数
var numbers = text.match(/\d+/g);
log("所有整数:" + numbers); // ["12345", "99", "50", "3"]

// 提取所有数字(包括小数)
var decimalNumbers = text.match(/\d+\.?\d*/g);
log("所有数字:" + decimalNumbers);

// 提取特定格式的数字,如 6 位订单号
var orderNo = text.match(/\d{6}/g);
log("订单号:" + orderNo);

方法二:从 UI 控件获取文字并提取数字

// 文档地址 https://docs.hamibot.com/
'ui';

ui.layout(
    <frame>
        <text id="example" text="余额:100.50 元" />
    </frame>
);

// 获取控件文本
var text = ui.example.attr('text');

// 提取数字
var numbers = text.match(/\d+\.?\d*/g);
if (numbers) {
    var amount = parseFloat(numbers[0]);
    log("提取的金额:" + amount);
}

方法三:从屏幕 OCR 识别后提取数字

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}

sleep(1000);

// 截屏
var img = captureScreen();

// OCR 识别文字
var text = ocr.recognizeText(img);
log("识别结果:" + text);

// 提取数字
var numbers = text.match(/\d+\.?\d*/g);
if (numbers) {
    log("找到的数字:" + numbers);
}

img.recycle();
hamibot.exit();

方法四:使用 UiSelector 查找包含数字的控件

// 文档地址 https://docs.hamibot.com/
// 使用正则匹配控件文本中的数字
var selector = textMatches("\\d+");
var widgets = selector.find();

widgets.forEach(function(widget) {
    var text = widget.text();
    log("包含数字的文本:" + text);
});

常用正则表达式参考

表达式 说明
/\d+/ 匹配一个或多个数字
/\d+\.\d+/ 匹配小数
/\d+\.?\d*/ 匹配整数或小数
/\d{6}/ 匹配 6 位数字
/\d{4}-\d{2}-\d{2}/ 匹配日期格式

注意事项

  1. 正则表达式格式:如果使用字符串形式的正则,需要用 \\ 表示 \,例如 textMatches("\\d+");如果使用 JavaScript 正则字面量则不需要,例如 textMatches(/\d+/)

  2. 空值处理match() 方法在没有匹配时返回 null,使用前需要判断

  3. 类型转换:提取的数字是字符串,需要用 parseInt()parseFloat() 转换为数字类型

  4. Rhino 兼容性:避免使用箭头函数、默认参数等新语法

根据你的具体场景选择合适的方法即可。

ℹ️ 本回答由 AI 生成,内容仅供参考