Pig脚本正则表达式筛选:排除以‘-单个数字’结尾的字符串
在Pig脚本中筛选不以‘-<单个数字>’结尾的字符串
没问题,我来帮你搞定这个Pig脚本里的正则筛选需求!核心思路是排除所有以“-单个数字”结尾的字符串,反过来就得到我们要保留的内容。
先明确匹配规则
先给你理清楚哪些是要保留的,哪些是要排除的:
- 🔹 匹配项(需要保留的字符串):
- "abc"(无后缀)
- "def-xyz"(后缀是字母,不是单个数字)
- "ghi-123"(后缀是-三位数字,不是单个)
- "jkl-"(只有减号,没有数字)
- 🔸 不匹配项(需要排除的字符串):
- "mno-5"(结尾是-单个数字)
- "pqr-9"(结尾是-单个数字)
- "stu-0"(结尾是-单个数字)
Pig脚本实现步骤
假设你已经加载了包含目标字符串的数据集,我们用FILTER结合正则表达式来实现筛选:
- 首先加载数据(示例中假设数据文件每行一个字符串):
raw_data = LOAD 'your_data_file.txt' AS (target_str: chararray);
- 执行筛选逻辑:
filtered_data = FILTER raw_data BY NOT (target_str MATCHES '.*-\\d$');
正则表达式解释
这里的正则.*-\\d$是关键,拆解一下:
.*:匹配任意字符(除换行)任意次数,覆盖字符串开头到减号前的部分-:匹配字面量的减号\\d:匹配单个阿拉伯数字(0-9)——注意Pig里字符串的反斜杠需要转义,所以写两个\\$:锚定到字符串结尾,确保减号和数字是最后一部分
加上NOT之后,就会保留所有**不满足“-单个数字结尾”**的字符串,正好符合你的需求。
额外注意点
- 如果你的字符串可能包含特殊字符(比如转义字符),可以根据实际情况调整正则,但这个写法覆盖了绝大多数常规场景
- 要是需要支持多语言数字(比如中文数字),那得把
\\d换成更宽泛的字符集,但一般业务场景下用\\d就足够了
内容的提问来源于stack exchange,提问作者Olivia
相关产品推荐
相关产品推荐

