我怎么说,在正则表达式中:
以大写字母开头的字符串的任何部分,包含至少一个空格字符,不包含字符串
" _ "
(空格下划线空格),以字符串“!!!”结尾(没有引号)?
我遇到“不包含”部分的问题。
这是我到目前为止所做的:
[A-Z].* .*!!!
如何修改此项以指定“不包含'_'”?
它不需要是特定的字符串“_”。怎么说“不包含”任何字符串?例如,不包含“狗”?
编辑:我希望该解决方案与Php的“preg_replace”兼容
编辑:示例:
“_”的示例:
Abc xyz !!! < ---匹配
Hello World !!! < ---匹配
有_空间下划线空间! < ---不匹配
“狗”的例子:
真狗! < ---不匹配,(包含“狗”)
Hello World !!! < ---匹配
答案 0 :(得分:2)
x(?!y)
表达式只有在x
后不紧跟y
时才匹配[A-Z](?!%s)(.(?!%s))* (.(?!%s))*!!!
。所以,这似乎是你想要的东西:
%s
{{1}}是你禁用的字符串。
答案 1 :(得分:1)
任何可能的正则表达式都可能比两个正则表达式复杂得多。与您的一样:[A-Z].* .*!!!
,第二个应用于匹配的字符串并检查是否包含_
。
答案 2 :(得分:0)
从任何资本开始;有一个可选的字符串,除了下划线,空格,然后是除了下划线之外的所有内容,后面跟着三个感叹号。
[A-Z][^_]*[ ][^_]*!!!
答案 3 :(得分:0)
首先测试你的字符串是否出现“_”,因为那是不匹配的。然后检查你想要的东西。
这就是我要做的事,而不是花费大量时间来为它找出一个正则表达式。
这是一个测试表达式的好网站:Nregex
编辑:我在你的问题上阅读了更多内容,看到我的回答并不是很好,所以这是另一次尝试。对上述表达式之一的修改:
[A-Z](?! _ )(\w(?! _ ))* (\w(?! _ ))*!!!
答案 4 :(得分:0)
[A-Z]([^ ]*(?! _ ) ?)*!!!
修改 我错过了至少一个空格的要求。以下正则表达式包括该要求:
[A-Z][^ ]* (?!_ )((?! _ ).)*!!!
答案 5 :(得分:0)
我曾经通过grep
的{{1}}选项解决此问题(如果我在Linux上和/或可以使用-v
)。
所以搜索一些东西,然后跳过不感兴趣的部分。
grep
没有grep(该死的窗口,没有管理员权限)但是使用Vim:
grep something <INPUT> | grep -v uninteresting
(这会打开,然后删除与您需要的不匹配的每一行,然后删除每一行,您不需要的内容,然后将结果保存为vim -c "v/i'm searching for this/d" -c "g/and don't need this/d" -c "w checkoutput" <INPUT>
。您应该检查哪一行。)
HTH
答案 6 :(得分:-1)
有一个很好的小程序,你可以在其中构建你的正则表达式并进行测试。
http://software.marioschneider-online.de/?C%23%3A_RegEx_Test