正则表达式匹配所有用数字穿插数字的非数字字符

时间:2016-03-15 19:21:48

标签: sql regex perl regex-lookarounds sqlanywhere

使用SQL Anywhere 16 regex(相当于Perl 5)我想匹配以下字符串中的所有非数字字符:

This 100 is 2 a 333 test.,以便匹配产生This is a test.

我觉得这需要外观,但我不确定确切的语法。

我的一些失败尝试:

\D*匹配This

\D*(?=\d)匹配This

(\D*(?=\d*)|(?<=\d)\D*)*匹配This

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下,基于增加的说明(以及我自己的搜索),不能使用典型的“搜索和替换”功能。似乎典型的“全局”匹配也不可用。鉴于此,一些剩余的选项是

  • “全局匹配”可以通过每个Documentation的环视声明来完成。

以下是来自SQL Anywhere 12 docs的示例,从带有数字的字符串中提取单词

  

当尝试拆分字符串时,Lookahead和lookbehind断言对REGEXP_SUBSTR很有用。例如,您可以通过执行以下语句在Customers表的Address列中返回街道名称列表(不包含街道号码):

SELECT REGEXP_SUBSTR( Street, '(?<=^\\S+\\s+).*$' ) FROM Customers;
  • 构图以捕捉和匹配。应该是
    (\D+)\d*(\D+)\d* ...

问题是你必须手动提供足够的这些来覆盖整个字符串。

  • REGEXP_SUBSTR允许匹配事件的规范(第一,第四,......)。
    然后可以编写一个循环来匹配简单的\D+,并通过循环增加位置。

但是,通常不容易推荐循环。