gpt4 book ai didi

ruby - 用正则表达式替换字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:33 25 4
gpt4 key购买 nike

我有一个设置 $1 的正则表达式:它对应于 () 之间的文本:the_beginning(.*)the_end

我想用 somethingelse 替换 $1 对应的值,而不是所有的正则表达式。

在真实环境中:

我的字符串包含:

/* MyKey */= { [code_missing]; MY_VALUE = "123456789"; [代码缺失]; }

我想替换“123456789”(例如用“987654321”)。这是我的正则表达式:

"/\\* MyKey\\*/= {[^}]*MY_VALUE =\"(.*)\";"

最佳答案

我仍然不确定你到底想要什么,但这里有一些代码应该可以帮助你:

str = "Hello this is the_beginning that comes before the_end of the string"
p str.sub /the_beginning(.+?)the_end/, 'new_beginning\1new_end'
#=> "Hello this is new_beginning that comes before new_end of the string"

p str.sub /(the_beginning).+?(the_end)/, '\1new middle\2'
#=> "Hello this is the_beginningnew middlethe_end of the string"

编辑:

theDoc = '/* MyKey */ = { [code_missing]; MY_VALUE = "123456789";'
regex = %r{/\* MyKey \*/ = {[^}]*MY_VALUE = "(.*)";}
p theDoc[ regex, 1 ] # extract the captured group
#=> "123456789"

newDoc = theDoc.sub( regex, 'var foo = \1' )
#=> "var foo = 123456789" # replace, saving the captured information

编辑#2:在比赛之前/之后获取信息

regex = /\d+/
match = regex.match( theDoc )
p match.pre_match, match[0], match.post_match
#=> "/* MyKey */ = { [code_missing]; MY_VALUE = \""
#=> "123456789"
#=> "\";"

newDoc = "#{match.pre_match}HELLO#{match.post_match}"
#=> "/* MyKey */ = { [code_missing]; MY_VALUE = \"HELLO\";"

请注意,这需要一个实际上不匹配前/后文本的正则表达式。

如果你需要指定限制,而不是内容,你可以使用零宽度lookbehind/lookahead:

regex = /(?<=the_beginning).+?(?=the_end)/
m = regex.match(str)
"#{m.pre_match}--new middle--#{m.post_match}"
#=> "Hello this is the_beginning--new middle--the_end of the string"

...但现在这显然比捕获和使用 \1\2 需要更多的工作。我不确定我是否完全理解您在寻找什么,为什么您认为这样做会更容易。

关于ruby - 用正则表达式替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com