我正在使用Tableau创建可视化文件,并且需要将Regex应用于数据集中的字符串值。我正在尝试使用Regex返回此数据字符串的第n个匹配项:b29f3b2f2b2f3b3f1r2f3 + b3x#。数据将始终在一行中,每次遇到字符b,s,f或d时,我都需要将数据分解为子字符串,并且我需要匹配返回的第n个匹配项。例如,在确定要返回的数字匹配项时,将匹配以下内容:
我可以使用bfsd(?= [bfsd])获得n = 1个匹配项以返回正确的值,并尝试使用先行方式获取后续值以返回,但是找不到有效的正则表达式。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以使用此正则表达式:
[bsfd][^bsfd]*
使用'global'
标志。
这将创建以四个字母之一开头,后跟任意数量其他字符的匹配项。
结果将是array
,其中包含所有匹配项。请注意,Array
将以index 0
(而不是1)开头。
答案 1 :(得分:0)
如果您有gawk
,这会将输入字段划分为您的规范
$ awk -v FPAT='[a-f][0-9rx#+]+' '{$1=$1}1'
$ echo "b29f3b2f2b2f3b3f1r2f3+b3x#" |
awk -v FPAT='[a-f][0-9rx#+]+' '{for(i=1;i<=NF;i++) print i " -> " $i}'
1 -> b29
2 -> f3
3 -> b2
4 -> f2
5 -> b2
6 -> f3
7 -> b3
8 -> f1r2
9 -> f3+
10 -> b3x#
答案 2 :(得分:0)
您的项目模式为[bfsd][^bfsd]*
。
您可以使用^(?:.*?([bfsd][^bfsd]*)){n}
来获取所需的内容,只需将n
变量更新为所需的数字即可。
此模式将为您提供第二个值:
^(?:.*?([bfsd][^bfsd]*)){2}
请参见regex demo。
详细信息
^
-字符串的开头(?:.*?([bfsd][^bfsd]*)){2}
-两次出现
.*?
-任意0个以上的字符,尽可能少([bfsd][^bfsd]*)
-b
,f
,s
或d
,后跟0个字符,比b
,f
,s
和d
。