0

我有一个像 "10-16.7" 这样的文字字符串。我想过滤它并取第一个数字。在此示例中,我只想过滤数字 10 。

我认为这是正确的正则表达式:(["'])(.*-*)-.* 但是当我在查询中尝试它时,它无法识别 ["'] 模式。所以我发现了这个字符串中的转义序列 ,但是当我尝试FILTER regex(?mystring, "(\")(.*-*)-.*") }时它没有给出错误但它没有捕获任何东西(我的数据集包含“50-58”、“9.4-13”、“72-85”等值)

4

1 回答 1

1

如果你有一个数字后跟一个破折号,然后是任何东西,我会使用下面的正则表达式(假设你不需要担心数字是有效的,因为这匹配字符串"00323..23....3.-2",例如):

^([0-9.]+)-.*

我假设引号实际上不是字符串的一部分。如果是,只需添加\"^\"([0-9.]+)-.*

要提取数字,您需要将BIND其转换为变量,如下所示:

FILTER(REGEX(?test, "^[0-9.]+-"))
BIND(REPLACE(?mystring, "^([0-9.]+)-.*", "$1") AS ?number)

在这里,我通过将字符串替换为与$1数字匹配的第一个捕获组 ( ) 来获取数字,并将结果绑定到名为?number.

于 2016-04-25T14:34:58.407 回答