我正在使用这个简单的正则表达式来处理我的纯文本文件:
\([A-Za-z]*\)
我得到的比赛如下:
...(test)...
,...(Next)...
,...(Warning)...
等等
是否可以排除以#
开头的匹配项?例如:
# Caught Stealing from Something (Warning) (3300-3599)
我已经尝试了很多并想出了这个:
(?:^\s*?#.*)|(\([A-Za-z0-9\s\-]*\))
现在我只需要显示第一个捕获组的匹配,但我不知道如何。有人可以给小费吗?
答案 0 :(得分:1)
这不像看起来那么直截了当。
通常你会使用 lookarounds 来做这样的事情,但你的情况非常不正统。您希望获得与行相关的要求(缺少#)的非行相关结果(因为任何行可以有任意数量的结果)。
Lookarounds通常是特定于行的,只有一个结果。
我的解决方案:
\s*?#.*(?:\n|$)|(\([A-Za-z0-9\s\-]*\))
你不会避免将你的结果放在捕获组中。在这种情况下,您的所有结果都是1美元。我们的想法是描述注释行的可能性,如果不符合,则描述您感兴趣的项目的外观。由于注释行选项是第一个,因此其中的项目将不会被测试
我还将你的正则表达式改为包含空格,破折号和数字,以便有更多(content123)
个案例。如果您不想这样做,请放弃更改并使用\s*?#.*(?:\n|$)|(\([A-Za-z]*\))
肯定有其他方法可以做到这一点,但这是我最成功的方法。