我有一个像 "10-16.7" 这样的文字字符串。我想过滤它并取第一个数字。在此示例中,我只想过滤数字 10 。
我认为这是正确的正则表达式:(["'])(.*-*)-.*
但是当我在查询中尝试它时,它无法识别 ["'] 模式。所以我发现了这个
,但是当我尝试
FILTER regex(?mystring, "(\")(.*-*)-.*") }
时它没有给出错误但它没有捕获任何东西(我的数据集包含“50-58”、“9.4-13”、“72-85”等值)
如果你有一个数字后跟一个破折号,然后是任何东西,我会使用下面的正则表达式(假设你不需要担心数字是有效的,因为这匹配字符串"00323..23....3.-2"
,例如):
^([0-9.]+)-.*
我假设引号实际上不是字符串的一部分。如果是,只需添加\"
:^\"([0-9.]+)-.*
要提取数字,您需要将BIND
其转换为变量,如下所示:
FILTER(REGEX(?test, "^[0-9.]+-"))
BIND(REPLACE(?mystring, "^([0-9.]+)-.*", "$1") AS ?number)
在这里,我通过将字符串替换为与$1
数字匹配的第一个捕获组 ( ) 来获取数字,并将结果绑定到名为?number
.