Java 用于过滤联系人号码的正则表达式

Java 用于过滤联系人号码的正则表达式,java,regex,Java,Regex,我有一个电话号码列表,但我想根据某些条件删除其中一些号码。我正在尝试设置ETL 假设这是联系电话的列表: 897-54-6212 985566655 568-00-9977 000-56-8795 875-95-9999 &^*-(&-#$@) 111-85-4568 222-56-6542 333-56-4589 444-48-8978 555-48-8978 666-58-5648 777-58-5647 888-86-8978 456-33-5685 485-44-4568

我有一个电话号码列表,但我想根据某些条件删除其中一些号码。我正在尝试设置ETL

假设这是联系电话的列表:

897-54-6212
985566655
568-00-9977
000-56-8795
875-95-9999
&^*-(&-#$@)
111-85-4568
222-56-6542
333-56-4589
444-48-8978
555-48-8978
666-58-5648
777-58-5647
888-86-8978
456-33-5685
485-44-4568
465-55-8523
485-66-7824
468-77-5948
854-88-2358
785-78-1111
588-64-2222
078-05-1120
455-56-(0000)
我不想看到这样的数字,如果它包含:

  • 前三位数字不应包含000或666或900或999(例如,应拒绝666-77-5948)

  • 如果编号之间包含00(例如945-00-8796),则也应拒绝该编号

  • 如果数字包含任何类型的特殊字符,如
    @!#$%^()

  • 这可能是某种正则表达式,以便我可以过滤这些记录。我试过使用substring函数,但并没有达到预期效果

    这些数字应被拒绝:

    985566655
    568-00-9977
    000-56-8795
    &^*-(&-#$@)
    666-58-5648
    455-56-(0000)
    

    有人能帮忙吗?

    使用只指定数字和破折号的正则表达式可以排除特殊字符:

    ^\d{3}-\d{2}-\d{4}$
    
    如果您在黑名单中添加负面lookbehinds,则会显示如下:

    ^\d{3}(?<!000|666|999|900)-\d{2}(?<!00)-\d{4}$
    

    使用只指定数字和破折号的正则表达式可以排除特殊字符:

    ^\d{3}-\d{2}-\d{4}$
    
    如果您在黑名单中添加负面lookbehinds,则会显示如下:

    ^\d{3}(?<!000|666|999|900)-\d{2}(?<!00)-\d{4}$
    


    要清楚的是,你能指出列表中哪些数字是无效的吗?什么regex风格?@4castle,dwag…问题更新了。你用的是什么风格的regex?这是在哪种编程语言中使用的?不同的引擎有不同的功能。我一直将此页面标记为书签,以帮助w/regex:说清楚,你能指出列表中哪些数字无效吗?什么regex风格?@4castle,dwag…问题已更新。你使用的是什么风格的regex?这是在哪种编程语言中使用的?不同的引擎有不同的功能。我一直将此页面标记为书签,以帮助w/regex:@4castle…这里是什么?在Java中,您必须以字符串文本形式转义反斜杠。您必须在正则表达式中的所有反斜杠中添加一个额外的反斜杠<代码>\d在正则表达式中表示“数字”。作为字符串文字,它变成了
    \\d
    @Kate我添加了一段代码来演示如何使用它。@4castle…我是否可以添加一些东西来定义第一个条件下的范围…这样900到999之间的数字也可能被拒绝?这其实很简单。只需将黑名单
    9
    作为第一个字符。第一个否定的lookhehind将变成:
    (?@4castle…这里是什么?在Java中,您必须以字符串文本形式转义反斜杠。您必须向正则表达式中的所有反斜杠添加一个额外的反斜杠。
    \d
    表示“数字”在正则表达式中。作为字符串文字,它变成了
    \\d
    @Kate。我添加了一段代码来演示如何使用它。@4castle…我是否可以添加一些东西来定义第一个条件下的范围…这样900到999之间的数字也可能被拒绝?这其实很简单。只需将
    9
    作为第一个字符列入黑名单即可。第一个否定的lookhehind将变成:
    (?)?