正则表达式 - 查找号码但如果文档中包含特定单词则排除

时间:2012-01-24 17:10:51

标签: regex

我不确定这是可行的但是......我正在尝试搜索一个数字字符串。我有一个工作模式可以做到这一点,但如果文件中出现某些单词以及我不希望检测到的数字。

例如,我在所有文档中搜索一个9位数字,但如果文档包含单词test,testing,false ...等,我不希望捕获9位数字。

具体来说,我正在搜索SSN,但如果包含excel电子表格在文档中包含某些关键字,我不希望SSN被捕获。

1 个答案:

答案 0 :(得分:0)

绝对有可能。如何做到完全取决于正则表达式引擎,所以你需要添加这些信息,以防以下解决方案不适合你:

(?s)\A(?!.*\b(?:test|testing|false)\b).*(\b\d{9}\b)

比赛结束后,九位数字将在反向引用号码中。 1。

<强>解释

(?s)                    # Dot-matches-all mode (use (?m) in Ruby!)
\A                      # Start of string
(?!                     # Assert that it's impossible to match...
 .*                     #  any string, followed by
 \b                     #  a word boundary (start of word),
 (?:test|testing|false) #  one of these keywords (don't capture it),
 \b                     #  a word boundary (end of word).
)
.*                      # Match any string until...
(\b\d{9}\b)             # an entire nine-digit number.