我正在尝试匹配逗号分隔字符串中的所有内容,而不是更改通知(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?
如何匹配除CN ID以外的所有内容?
我在基于java的软件中使用regex ex,所以我相信这是一个JavaScript风格的正则表达式。
答案 0 :(得分:1)
对于您的示例字符串,您可以像这样尝试选择除“CN98765432”和“CN12345678”之外的所有字符串,并在您对karakfa答案的评论中说明:
“理想情况下,我希望CN98765432,CN12345678成为剩下的”
匹配
,?
匹配可选逗号(?!
否定前方断言右侧的内容不是
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