替换特定单词模式后未出现的所有冒号字符
Replace all colon character that does not occur after specific word pattern
对于给定的文本,例如
pack: my box with five: dozen: liquor: jugs ::: :
我想用只出现在 ack 和 zen 之后的 ;
替换所有 :
。所以我在这里期望的输出是
pack: my box with five; dozen: liquor; jugs ;;; ;
请注意 :
在 ack 和 zen 保持不变而其他所有内容都被替换之后。
请帮助我。我只能匹配 (ack|zen):
。这只是给我匹配 ack:
和 zen:
。我不知道如何否定它并构建一个正则表达式。
注意:我正在使用 Ruby。
使用负后视进行替换。
搜索:
(?<!ack|zen):
替换为:
;
(?<!ack|zen):
是一个负向后视,这意味着只有当冒号前面没有 ack
或 zen
.
时才匹配冒号
您需要回顾一下 Regular-Expressions 中的说明。
这个有效:
(?<=(ack|zen)):
您可以在这里进行测试:https://www.debuggex.com/。
您可以使用带有两个固定字符串的负后视:
(?<!ack|zen):
为了简化正则表达式引擎的工作,你也可以测试一下:
:(?<!ack:|zen:)
(对于最后一个模式,lookbehind 的两个分支仅在带有连字符的位置进行测试,而不是在第一个模式的字符串中的每个位置进行测试。)
你可以在这里使用负面回顾并使用 gsub
:
puts "pack: my box with five: dozen: liquor: jugs ::: :".gsub(/(?<!ack|zen):/, ";")
结果:
pack: my box with five; dozen: liquor; jugs ;;; ;
您可以在此处使用后视,因为两个部分的大小相同(3 个字符)。
对于给定的文本,例如
pack: my box with five: dozen: liquor: jugs ::: :
我想用只出现在 ack 和 zen 之后的 ;
替换所有 :
。所以我在这里期望的输出是
pack: my box with five; dozen: liquor; jugs ;;; ;
请注意 :
在 ack 和 zen 保持不变而其他所有内容都被替换之后。
请帮助我。我只能匹配 (ack|zen):
。这只是给我匹配 ack:
和 zen:
。我不知道如何否定它并构建一个正则表达式。
注意:我正在使用 Ruby。
使用负后视进行替换。
搜索:
(?<!ack|zen):
替换为:
;
(?<!ack|zen):
是一个负向后视,这意味着只有当冒号前面没有 ack
或 zen
.
您需要回顾一下 Regular-Expressions 中的说明。
这个有效:
(?<=(ack|zen)):
您可以在这里进行测试:https://www.debuggex.com/。
您可以使用带有两个固定字符串的负后视:
(?<!ack|zen):
为了简化正则表达式引擎的工作,你也可以测试一下:
:(?<!ack:|zen:)
(对于最后一个模式,lookbehind 的两个分支仅在带有连字符的位置进行测试,而不是在第一个模式的字符串中的每个位置进行测试。)
你可以在这里使用负面回顾并使用 gsub
:
puts "pack: my box with five: dozen: liquor: jugs ::: :".gsub(/(?<!ack|zen):/, ";")
结果:
pack: my box with five; dozen: liquor; jugs ;;; ;
您可以在此处使用后视,因为两个部分的大小相同(3 个字符)。