Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:使用word选择整行,但如果存在一个或多个其他单词或模式,则不要选择该行_Java_Regex_Select_Word_Ignore - Fatal编程技术网

Java正则表达式:使用word选择整行,但如果存在一个或多个其他单词或模式,则不要选择该行

Java正则表达式:使用word选择整行,但如果存在一个或多个其他单词或模式,则不要选择该行,java,regex,select,word,ignore,Java,Regex,Select,Word,Ignore,我有一个有许多列的表。一列是自由文本字段,即无集合结构,但我可以通过查看关键字、编写正则表达式选择整行并用更简单/更好的描述替换该行来提供顺序。下面4行是实际数据 ************************************************************************ INVOICE·DID·NOT·MATCH·QUOTE·NEED·TO·DO·A·PARTIAL·CREDIT,·ALSO·NEED·TO·CREDIT·SHIPPING·CRATES·AN

我有一个有许多列的表。一列是自由文本字段,即无集合结构,但我可以通过查看关键字、编写正则表达式选择整行并用更简单/更好的描述替换该行来提供顺序。下面4行是实际数据

************************************************************************
INVOICE·DID·NOT·MATCH·QUOTE·NEED·TO·DO·A·PARTIAL·CREDIT,·ALSO·NEED·TO·CREDIT·SHIPPING·CRATES·AND·REBILL·ON·A·SEPARATE·INVOICE
*************************************************************************
LUBRIZOL·RECEIVED·4·DV·THAT·BELONGED·TO·EXXON.·THEY·DID·NOT·RECEIVE·THE·CORRECT·VALVES·WE·CONTACTED·EXXON·TO·SEE·IF·THEY·COULD·F
*************************************************************************
MIL·SPEC·EPCC·SN:·000727·DID·NOT·ENERGIZE·WHEN·24V·WAS·APPLIED·PO·4500432166·DELIVERY·80794321·ORDER·498282
**************************************************************************
MISCOMMUNICATION·WITH·CUSTOMER·ABOUT·ORINGS.·THE·ONES·QUOTED·AND·SHIPPED·WERE·MADE·OUT·OF·SPECIAL·MATERIAL,·CUSTOMER·DID·NOT·NE
***************************************************************************
1) 所有行都包含“未包含”” 2) 一行包含单词“客户

目标:我想找到和所有包含“未”的行,然后取消选择包含“客户”的整行,只剩下三行

我有大量的行要清理,更改选择和取消选择关键字将使我在数据清理工作中有很大的能力

下面的正则表达式行将查找并选择任何带有“未”的行

注意:有两个星号(一个在句点后的开始处,一个在结尾处)被此编辑器删除

如何修改此行以实现上述目标


对于我最初的问题中出现的任何混乱,我深表歉意,我希望这篇最新的编辑文章能帮助我展示我正在努力实现的目标。我非常感谢在这方面的任何智慧。:)

我猜您可能正在设计一个类似以下内容的表达式:

^(?!.*\b(?:cat|dog)\b)(?=.*\b(?:thread|screw|bolt|tooling|machin|workman|incompl|craftsman|tolera|incorrec|too\s+wide|assembly|lathe)\S*\b).*$
或者可能有点接近这个


如果要探索/简化/修改该表达式,请在的右上面板中进行说明

试验
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
最终字符串regex=“^(?)*(cat | dog))(?=.*\\b(?:螺纹|螺钉|螺栓|工具|机械|工人|不完整|工匠|公差|不正确|太\\s+宽|装配|车床)\\s*\\b.*$”;
final String=“thread\n”
+“线程\n”
+“未读\n”
+“螺钉\n”
+“螺钉\n”
+“工具前的一些单词\n”
+“som机器前的单词\n”
+“诺沃克曼\n”
+“非不完整\n”
+“太宽了,在那之后\n”
+“在CAT后面加上一些单词\n”
+“不正确”;
final Pattern=Pattern.compile(regex,Pattern.MULTILINE | Pattern.CASE|u不区分大小写);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));

对于(inti=1;i沿着这条线的东西

(?m)^.*(?:CAT | DOG))(?=.*b(?:组装|螺栓|工匠| INCO(?:MPL | RREC)|车床|加工|螺钉| T(?:螺纹| O(?:LERA | O(?[]宽|灵)))|工人.*$

我没有数据来测试,哦,好吧

解释

 (?m)                          # Multi-line mode if not already     
 ^                             # BOL
 (?!
      .* 
      (?: CAT | DOG )               # No CAT or DOG
 )
 (?=                           # Must have one of these keywords
      .* \b 
      (?:                           # Trie of keywords
           ASSEMBLY
        |  BOLT
        |  CRAFTSMAN
        |  INCO
           (?: MPL | RREC )
        |  LATHE
        |  MACHIN
        |  SCREW
        |  T
           (?:
                HREAD
             |  O
                (?:
                     LERA
                  |  O
                     (?: [ ] WIDE | LING )
                )
           )
        |  WORKMAN

      )
      .* \b 
 )
 .*                            # Have a keyword, just grab the line
 $                             # EOL

使用此正则表达式匹配包含“未”但不包含“客户”的行:


(?!*CUSTOMER)
是一个消极的前瞻,当锚定到start
^
时,如果其中任何地方包含“CUSTOMER”,它将与行不匹配。

在正则表达式的开头添加一个消极的前瞻:
(?!*bCAT\b)
---如果字符串不包含单词
CAT
Emma-jex.im,则匹配。我需要进一步探索该工具。图片显示,它在行的开头查找“CAT”和“DOG”。我希望取消选择/忽略与“CAT”或“DOG”匹配的行出现在线路中的任何地方。@Emma…我有奇怪的互联网连接,我无法测试您或SIN的解决方案。明天情况好转时,我会尝试一下。@SIN-以下是我感兴趣的线路示例:--在外活塞中安装活塞环之前,一个间隙袖珍阀已返还给客户。Clearance Ring measured。-----有几行被捕捉到带有关键字活塞和阀门,但因为单词RINGS包含在这一行中,所以必须排除它,即未选中。kill单词可以在这一行的任何地方。@Kevin-阅读我答案中的正则表达式时有问题吗?我不明白你的问题…添加新单词取决于你u、 而且它和你原来的帖子不一样!@SIN-我需要检查你的回复,看看我是否得到了我想要的东西。我在路上的时候,我的网络资源很不稳定。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^(?!.*(cat|dog))(?=.*\\b(?:thread|screw|bolt|tooling|machin|workman|incompl|craftsman|tolera|incorrec|too\\s+wide|assembly|lathe)\\S*\\b).*$";
final String string = "thread\n"
     + "threads\n"
     + "nothread \n"
     + "screw\n"
     + "screws\n"
     + "some words before tooling\n"
     + "som words before machines DOG\n"
     + "noworkman\n"
     + "non-incomplete\n"
     + "too   wide something after that\n"
     + "lathe some words after CAT\n"
     + "NOTincorrect";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
 (?m)                          # Multi-line mode if not already     
 ^                             # BOL
 (?!
      .* 
      (?: CAT | DOG )               # No CAT or DOG
 )
 (?=                           # Must have one of these keywords
      .* \b 
      (?:                           # Trie of keywords
           ASSEMBLY
        |  BOLT
        |  CRAFTSMAN
        |  INCO
           (?: MPL | RREC )
        |  LATHE
        |  MACHIN
        |  SCREW
        |  T
           (?:
                HREAD
             |  O
                (?:
                     LERA
                  |  O
                     (?: [ ] WIDE | LING )
                )
           )
        |  WORKMAN

      )
      .* \b 
 )
 .*                            # Have a keyword, just grab the line
 $                             # EOL
^(?!.*CUSTOMER).*DID NOT.*$