正则表达式 - 如果组有前缀则忽略
Regex - Ignore if group has prefix
我正在尝试捕获自由文本中的 8 位 phone 数字。如果之前出现特定字符串,则应忽略此选项。
我的正则表达式:
(\b(\+?001|002)?[-]?\d{4}(-|\s)?\d{4}\b)
要捕获:
+001 12345678
12345678
未捕获:
TTT-12345678-123
TTT-12345678
我正在尝试使用负向后视,如下例所示:
\w*(?<!foo)bar
但只有当正则表达式没有后续组时以上才有效。
您可以使用
(?<!TTT-)(?<!\w)(?:\+?001|002)?[-\s]?\d{4}[-\s]?\d{4}\b
详情
(?<!TTT-)
- 不允许 TTT-
紧靠左侧
(?<!\w)
- 左边不允许出现字符字符
(?:\+?001|002)?
- 可选的非捕获组匹配 +001
、001
或 002
的 1 次或 0 次出现
[-\s]?
- 一个可选的 -
或空格
\d{4}
- 任意四位数字
[-\s]?\d{4}
- - 一个可选的 -
或空格和任意四位数字
\b
- 单词边界。
如果数字可以粘在右边的单词字符上,请将 \b
单词边界替换为右侧数字边界,(?!\d)
。
我正在尝试捕获自由文本中的 8 位 phone 数字。如果之前出现特定字符串,则应忽略此选项。
我的正则表达式:
(\b(\+?001|002)?[-]?\d{4}(-|\s)?\d{4}\b)
要捕获:
+001 12345678
12345678
未捕获:
TTT-12345678-123
TTT-12345678
我正在尝试使用负向后视,如下例所示:
\w*(?<!foo)bar
但只有当正则表达式没有后续组时以上才有效。
您可以使用
(?<!TTT-)(?<!\w)(?:\+?001|002)?[-\s]?\d{4}[-\s]?\d{4}\b
详情
(?<!TTT-)
- 不允许TTT-
紧靠左侧(?<!\w)
- 左边不允许出现字符字符(?:\+?001|002)?
- 可选的非捕获组匹配+001
、001
或002
的 1 次或 0 次出现
[-\s]?
- 一个可选的-
或空格\d{4}
- 任意四位数字[-\s]?\d{4}
- - 一个可选的-
或空格和任意四位数字\b
- 单词边界。
如果数字可以粘在右边的单词字符上,请将 \b
单词边界替换为右侧数字边界,(?!\d)
。