排除以“#”开头的匹配项

时间:2015-07-05 20:00:21

标签: regex

我正在使用这个简单的正则表达式来处理我的纯文本文件:

\([A-Za-z]*\)

我得到的比赛如下:

...(test)......(Next)......(Warning)...等等

是否可以排除以#开头的匹配项?例如:

 #  Caught Stealing from Something (Warning)   (3300-3599)

我已经尝试了很多并想出了这个:

(?:^\s*?#.*)|(\([A-Za-z0-9\s\-]*\))

现在我只需要显示第一个捕获组的匹配,但我不知道如何。有人可以给小费吗?

1 个答案:

答案 0 :(得分:1)

这不像看起来那么直截了当。

通常你会使用 lookarounds 来做这样的事情,但你的情况非常不正统。您希望获得与行相关的要求(缺少#)的非行相关结果(因为任何行可以有任意数量的结果)。

Lookarounds通常是特定于行的,只有一个结果。

我的解决方案:

\s*?#.*(?:\n|$)|(\([A-Za-z0-9\s\-]*\))

DEMO

你不会避免将你的结果放在捕获组中。在这种情况下,您的所有结果都是1美元。我们的想法是描述注释行的可能性,如果不符合,则描述您感兴趣的项目的外观。由于注释行选项是第一个,因此其中的项目将不会被测试

我还将你的正则表达式改为包含空格,破折号和数字,以便有更多(content123)个案例。如果您不想这样做,请放弃更改并使用\s*?#.*(?:\n|$)|(\([A-Za-z]*\))

肯定有其他方法可以做到这一点,但这是我最成功的方法。