是否有一个正则表达式来替换所有提到的字符串中的子字符串与除引号"'
之外的另一个字符串?正则表达式得到子字符串外引号
例如,如果子是“你好”和替换字符串为“世界”:
Hello Everybody "Hello" Everybody
应该返回World Everybody "Hello" Everybody
很抱歉的措辞早些时候,有一个brainfart。
是否有一个正则表达式来替换所有提到的字符串中的子字符串与除引号"'
之外的另一个字符串?正则表达式得到子字符串外引号
例如,如果子是“你好”和替换字符串为“世界”:
Hello Everybody "Hello" Everybody
应该返回World Everybody "Hello" Everybody
很抱歉的措辞早些时候,有一个brainfart。
你可以使用负回顾后和向前断言为"
或'
这样,这将在
"apple hello world"
失败:
(?<!["'])(Hello)(?!["'])
工作正则表达式例如:
匹配:
"Hello" world //no match
Hello World //matches "Hello"
编辑:
所以在更换情况:
例字符串:Hello Everybody "Hello" Everybody
替换为:""
(无)
输出:
Everybody "Hello" Everybody
即使(可以说)它是引用中的苹果和世界,这将不匹配'“苹果”你好“世界”。 –
@DamienBlack,是的,OP不希望引号中的任何内容匹配。因此,“苹果”你好“世界”不匹配。 – MElliott
但是'hello'没有引号。这是引用中的“苹果”和“世界”。这也不会匹配'你好“世界'',这里显然”世界“在引号中,而不是你好。 –
^([^"]*"[^"]*")*[^"]*hello
此正则表达式匹配“你好”仅当有偶数(包括0)的引号字符之前它(这表明它不是当前引号内)。
进行分解:
与这里其他的答案,这将在下列情况下成功:
"apple"hello"world"
因为apple
和world
在引号中,而不是你好。
而且因为hello仍然在引号
使用负前瞻和负后向断言。这工作。
irb(main):050:0> testcases = ["hello world", "'hello world", "'hello' world", "hello' world", "hello\"world"]
=> ["hello world", "'hello world", "'hello' world", "hello' world", "hello\"world"]
irb(main):051:0> testcases.each { |i| puts /(?<!')(?<!")hello(?!")(?!')/.match(i) }
hello
=> ["hello world", "'hello world", "'hello' world", "hello' world", "hello\"world"]
编辑:更新为包含双引号,但可以扩展为任何字符。
这不起作用,它在'hello'world''上失败它也成功应用在'test hello world''上,它不应该 –
这个概念是有效的,我甚至解释了负面预测的概念,这是先进的正则表达式概念。它可以更新为包含其他字符。为什么downvote? – archie
在我上面的评论''test hello world''上应该有另外一个引号' –
说whaaaat:''你好“世界”' – tenub
'删除引号内的子字符串...是不是我想要的那么你想要什么? – sawa
我只想忽略子字符串 – avinashbot