正则表达式就像 Hive 上没有前缀的电话号码 (+01)
Regex like telephone number on Hive without prefix (+01)
我们在配置单元上遇到正则表达式问题。
我们需要排除记录开头带有 +37
或 0037
的数字(这可能是正则表达式上的错误结果)并且没有字母或 space.
我们正在尝试这个:
regexp_like(tel_number,'^\+37|^0037+[a-zA-ZÀÈÌÒÙ ]')
但它不起作用。
编辑:我们希望它从 select 出来是真(正确的数字)或假。
要排除以 +01 0r +001 或 +0001 开头且只有数字且没有空格或字母的号码:
... WHERE tel_number NOT rlike '^\+0{1,3}1\d+$'
Hive 中的 +
等特殊字符和 \d
等字符 类 应使用双斜杠进行转义:\+
和 \d
.
一般问题是,如果您想在正则表达式中描述格式错误的电话号码并排除 与该模式匹配的所有内容,或者您是否想描述格式正确的电话号码number 和 include 匹配模式的所有内容。
走哪条路,取决于你的情况。根据我对您的要求的了解,将“不以 0037
或 +37
开头”作为格式正确的电话号码的条件可能是一个好方法。
模式应该是这样的:
您的号码可以以 +
或 00
开头:^(\+|00)
它后面不能跟 37,它在正则表达式中可以用以下一组替代项表示:
一个。它后面首先是 3,然后是除 7 之外的任何内容:3[0-689]
b。它后面首先是除 3 以外的任何数字,然后是任何数字:[0-24-9]\d
之后是一个未定义长度(至少一个)的数字序列,直到字符串结束:\d+$
把所有东西放在一起:
^(\+|00)(3[0-689]|[0-24-9]\d)\d+$
你可以在这里玩这个正则表达式,看看它是否符合你的需要:https://regex101.com/r/KK5rjE/3
注意:正如leftjoin所指出的:要在配置单元中使用此正则表达式,您可能需要另外转义模式中的反斜杠\
。
您可以使用
regexp_like(tel_number,'^(?!\+37|0037)\+?\d+$')
参见regex demo。详情:
^
- 字符串开头
(?!\+37|0037)
- 如果 +37
或 0037
紧邻当前位置 的右侧,则匹配失败的否定前瞻
\+?
- 一个可选的 +
符号
\d+
- 一位或多位数字
$
- 字符串结尾。
我们在配置单元上遇到正则表达式问题。
我们需要排除记录开头带有 +37
或 0037
的数字(这可能是正则表达式上的错误结果)并且没有字母或 space.
我们正在尝试这个:
regexp_like(tel_number,'^\+37|^0037+[a-zA-ZÀÈÌÒÙ ]')
但它不起作用。
编辑:我们希望它从 select 出来是真(正确的数字)或假。
要排除以 +01 0r +001 或 +0001 开头且只有数字且没有空格或字母的号码:
... WHERE tel_number NOT rlike '^\+0{1,3}1\d+$'
Hive 中的 +
等特殊字符和 \d
等字符 类 应使用双斜杠进行转义:\+
和 \d
.
一般问题是,如果您想在正则表达式中描述格式错误的电话号码并排除 与该模式匹配的所有内容,或者您是否想描述格式正确的电话号码number 和 include 匹配模式的所有内容。
走哪条路,取决于你的情况。根据我对您的要求的了解,将“不以 0037
或 +37
开头”作为格式正确的电话号码的条件可能是一个好方法。
模式应该是这样的:
您的号码可以以
+
或00
开头:^(\+|00)
它后面不能跟 37,它在正则表达式中可以用以下一组替代项表示:
一个。它后面首先是 3,然后是除 7 之外的任何内容:
3[0-689]
b。它后面首先是除 3 以外的任何数字,然后是任何数字:
[0-24-9]\d
之后是一个未定义长度(至少一个)的数字序列,直到字符串结束:
\d+$
把所有东西放在一起:
^(\+|00)(3[0-689]|[0-24-9]\d)\d+$
你可以在这里玩这个正则表达式,看看它是否符合你的需要:https://regex101.com/r/KK5rjE/3
注意:正如leftjoin所指出的:要在配置单元中使用此正则表达式,您可能需要另外转义模式中的反斜杠\
。
您可以使用
regexp_like(tel_number,'^(?!\+37|0037)\+?\d+$')
参见regex demo。详情:
^
- 字符串开头(?!\+37|0037)
- 如果+37
或0037
紧邻当前位置 的右侧,则匹配失败的否定前瞻
\+?
- 一个可选的+
符号\d+
- 一位或多位数字$
- 字符串结尾。