REGEXP_COUNT和重叠模式

时间:2016-05-25 20:35:21

标签: regex oracle

我对正则表达式有疑问。正如过去的问题所述,我正在进行半完整地址解析。

在一个区域,我正在检查地址中是否有太多方向。我只检查缩短的形式,如N,E,S,W,NE,NW,SE,SW。我当前的表达式确实有效,但我想要一些不同的东西,以便更好地适应代码的其余部分。

REGEXP_COUNT(ADRS, '(\s|^)' || DIRN || '(\s|$)', 1, 'i')

我想使用"N E S W"

但我知道在String MyString= driver.findElement(By.xpath("//div[@class='breadcrumb']")).getText(); //get all child nodes of div parent class List<WebElement> ele= driver.findElements(By.xpath("//div[@class='breadcrumb']/child::*")); for(WebElement i:ele) { //substracing a text of child node from parent node text MyString= MyString.substring(i.getText().length(), MyString.length()); //removing white spaces MyString=MyString.trim(); } System.out.println(MyString); 这样的情况下它不会正确计算。在这种情况下,计数将是2.我知道这是因为N和E之间的空间被认为是N情况的一部分,所以它继续&#34; E S&#34;它并不认为E是线的起点,而且已经占用了空间。

现在改变它以计算所有4个很容易,但是它不适用于&#34; North Albert S&#34;当我只想要1时,计数是3。

我想要的表达类型是什么?如果是它会是什么?

1 个答案:

答案 0 :(得分:0)

Oracle不支持\b进行字边界匹配。

最简单的方法是用两个空格字符替换每一行空白字符,然后使用正则表达式进行匹配:

REGEXP_COUNT(
  REGEXP_REPLACE( ADRS, '\s+', '  ' ),
  '(\s|^)' || DIRN || '(\s|$)',
  1,
  'i'
)