小编典典

正则表达式字符出现之间的匹配

sql

我有以下字符串:

3#White House, District Of Columbia, United States#US#USDC#DC001#38.8951#-77.0364#531871#382

如您所见,该字符串由#分隔。我的用例类似于一个简单的SPLIT(string,“#”)操作,但是regex给了我更多的灵活性。

我想匹配两次出现的#之间的字符。例如,第二次和第三次出现之间的字符应匹配:“ US”

我使用的是Google Bigquery,能够匹配字符串的前两个术语,但与第三个术语比较费劲:

REGEXP_EXTRACT(locations,r'^\d') as location_type,    
REGEXP_REPLACE(REGEXP_EXTRACT(locations,r'^\d#.*?#'),r'^\d*#|#','') as location_full_name, 
????

位置是字符串,例如上面的字符串。

我已经找到了这个问题,但是我有多个范围,并且想指定比赛应该在哪两次比赛之间进行,例如第2次和第5次比赛。


阅读 156

收藏
2021-04-14

共1个答案

小编典典

您可以使用正则表达式,例如^(?:[^#]*#){N}([^#]*)whereN是所需的子字符串的数量减去1。要获取US,这是第三个值,您可以使用

^(?:[^#]*#){2}([^#]*)

正则表达式演示

细节

  • ^ -字符串开始
  • (?:[^#]*#){2} -的两个序列
    • [^#]* -除0以外的任何零个或多个字符 #
    • #-一个#字符
  • ([^#]*)-捕获组1:除以外的任何零个或多个字符#
2021-04-14