正则表达式除项目ID之外的所有内容

时间:2018-04-27 21:00:49

标签: regex

我正在尝试匹配逗号分隔字符串中的所有内容,而不是更改通知(CN)ID,这是一个以“CN”开头的字母数字ID。 该字符串是由逗号分隔的项目列表,其中每个项目条目显示项目ID,后跟“〜 - 〜”和一些行话。



他是一个示例字符串:

  

CN98765432〜 - ECN for A01234 Rev A,CR00098765~ - ECR for A12345 SOME PART NAME,CN12345678~ - ECN for A12345 Rev A

在这个字符串中,我希望匹配除“CN98765432”(出现在开头)和“CN12345678”(在最后一个逗号后面的末尾出现)以外的所有内容。


我已经尝试使用.*(?=CN\d),我认为它会抓住在“CN”之前结束的所有内容,但是匹配不正确

  

CN98765432~ - 〜ECN for A01234 Rev A,CR00098765~ - ECR for A12345 SOME PART NAME,

,其中包括初始CN。

我也试过了.*((?=CN\d)|$),但这与整个字符串匹配。



我看过类似的问题,但我无法将答案调整为适合我的问题。

How to match "anything up until this sequence of characters" in a regular expression?

Regex everything but

如何匹配除CN ID以外的所有内容?



我在基于java的软件中使用regex ex,所以我相信这是一个JavaScript风格的正则表达式。

2 个答案:

答案 0 :(得分:1)

对于您的示例字符串,您可以像这样尝试选择除“CN98765432”和“CN12345678”之外的所有字符串,并在您对karakfa答案的评论中说明:

理想情况下,我希望CN98765432,CN12345678成为剩下的

,?(?!CN\d+)\b[\w~ -]+

匹配

  • ,?匹配可选逗号
  • (?!否定前方断言右侧的内容不是
    • CN\d+匹配CN后跟一个或多个数字
  • )关闭否定前瞻
  • \d字边界
  • [\w~ -]+字符类使用您允许匹配的字符重复一次或多次

答案 1 :(得分:0)

删除匹配的模式

可能更容易
$ sed -E 's/CN[0-9]+//g' file

~-~ECN for A01234 Rev A,CR00098765~-~ECR for A12345 SOME PART NAME,~-~ECN for A12345 Rev A

如果你想捕捉模式

$ grep -oP 'CN[0-9]+' file | paste -sd,

CN98765432,CN12345678