gpt4 book ai didi

parsing - 如何使用 PARSE 从字符串中解析货币值

转载 作者:行者123 更新时间:2023-12-04 20:41:53 30 4
gpt4 key购买 nike

我正在尝试使用 Rebol 2/3 从字符串中解析货币值,货币值的格式为:

10,50 欧元或 10,50 欧元

我在浏览了所有 PARSE 文档后想出了这段代码,我可以在 Red 中找到它,但在 Rebol 2 或 3 中却没有。

digit: charset [#"0" - #"9"]
digits: [some digit]

euro: [digits "," digits [any " "] "€"]

parse "hello 22 44,55€ 66,44 € 33 world" [
some [
to euro
copy yank thru euro
(print yank)
]
]

在玩了很长一段时间后,我得出的结论是,由于某种原因,TO/THRU 不适用于数字(它似乎对字符工作正常),但我无法弄清楚如何在没有的情况下解析它TO/THRU,因为字符串具有需要跳过的任意内容。

结果:

(来自tryrebol)

红色的:
44,55€
66,44 €

雷 bool 3:
*** ERROR
** Script error: PARSE - invalid rule or usage of rule: [some digit]
** Where: parse try do either either either -apply-
** Near: parse "hello 22 44,55€ 66,44 € 33 world" [
some [
...

回复 2:
*** ERROR
code: 305
type: script
id: invalid-arg
arg1: [digits "," digits [any " "] "€"]
arg2: none
arg3: none
near: [parse "hello 22 44,55€ 66,44 € 33 world" [
some [
to euro
copy yank thru euro
(print yank)
]
]]
where: none

最佳答案

使用 TO 和 THRU 不适合模式匹配(至少目前在 Rebol 中)。

如果您只搜索货币,则可以创建匹配货币或向前推进的规则:

digit: charset [#"0" - #"9"]
digits: [some digit]

euro: [digits opt ["," digits] any " " "€"]

parse "hello 22 44,55€ 66,44 € 33 world" [
; can use ANY as both rules will advance if matched
any [
copy yank euro (probe yank)
| skip ; no euro here, move forward one
]
]

请注意,由于 EURO 与您要查找的货币序列完全匹配,因此您只需使用 COPY 将序列分配给一个单词。这应该适用于 Rebol 和 Red(尽管您需要在 Rebol 2 中使用 PARSE/ALL)。

关于parsing - 如何使用 PARSE 从字符串中解析货币值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25058376/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com