标签: string-substitution

为什么String :: sub!()会更改Ruby中克隆对象的原始内容?

我的Ruby代码中有一个结构,看起来有点像这样

Parameter = Struct.new(:name, :id, :default_value, :minimum, :maximum)
Run Code Online (Sandbox Code Playgroud)

之后,我使用创建此结构的实例

freq = Parameter.new('frequency', 15, 1000.0, 20.0, 20000.0)
Run Code Online (Sandbox Code Playgroud)

在某些时候,我需要这个结构的完全重复,所以我打电话

newFreq = freq.clone
Run Code Online (Sandbox Code Playgroud)

然后,我换了newFreq名字

newFreq.name.sub!('f', 'newF')
Run Code Online (Sandbox Code Playgroud)

奇迹般地改变freq.name了!

像一个简单的任务newFreq.name = 'newFrequency'不会改变freq.

这是应该的方式吗?

编辑:使用类而不是结构和重载clone来制作深层副本是一个好主意吗?

ruby clone string-substitution

5
推荐指数
2
解决办法
744
查看次数

sed通配符替换

我想基于通配符进行替换.例如,只有当"任期"一词出现在"="符号后面时,才将所有"任期"改为"处置".基本上是一个匹配这个的正则表达式=.*tenure

我这样做的sed命令是:

sed 's/=.*tenure/=.*disposition/g' file.txt
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其传递给包含以下内容的文件:

blah blah blah = change "tenure" to "disposition"
Run Code Online (Sandbox Code Playgroud)

我明白了

blah blah blah =.*disposition" to "disposition"
Run Code Online (Sandbox Code Playgroud)

代替:

blah blah blah = change "disposition" to "disposition"
Run Code Online (Sandbox Code Playgroud)

如何进行替换,使正则表达式中的通配符不会成为目标文件的一部分?

regex grep sed wildcard string-substitution

5
推荐指数
1
解决办法
2万
查看次数

在 Swift 中更改属性字符串的文本并保留属性

对于数据库程序中的输出,我插入了某些文本以指示粗体或斜体,以及一些替换图像的文本。例如:

“%Important%^所有员工到休息室^”的最终输出应为:

重要事项 所有员工到休息室

我编写了代码来查找周围带有“%”符号和“^”符号的文本,但我现在遇到的问题是文本输出,例如:

%重要% ^所有员工到休息室^

我想删除这些 % 和 ^,同时保留字符串的格式。

这是我一直使用的代码,直到它崩溃:

func processText(inString string: String) -> NSAttributedString {

let pattern = ["(?<=\\^).*?(?=\\^)","(?<=\\%).*?(?=\\%)","\\^", "\\%"]
let italicsRegex = NSRegularExpression(pattern: pattern[0], options: .allZeros, error: nil)
let range = NSMakeRange(0, count(string))
let italicsMatches = italicsRegex?.matchesInString(string, options: .allZeros, range: range) as? [NSTextCheckingResult]

var attributedText = NSMutableAttributedString(string: string)

for match in italicsMatches! {
    attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica-Oblique", size: 14.0)!, range: match.range)
}

let boldRegex = NSRegularExpression(pattern: pattern[1], options: .allZeros, error: nil)
let boldMatches …
Run Code Online (Sandbox Code Playgroud)

string string-substitution nsmutablestring swift

5
推荐指数
1
解决办法
5604
查看次数

在字符串中添加前导零

我的data.frame的一列如下所示:

c("BP_1_CSPP", "BP_2_GEGS", "BP_3_AEAG", "BP_4_KPAP", "BP_5_TAKP", 
"BP_6_GGDR", "BP_7_MQQP", "BP_8_EEEE", "BP_9_RSDP", "BP_10_APAS", 
"BP_11_KRGG", "BP_12_RSQQ", "BP_13_QQLS", "BP_14_EPEV", "BP_15_AAPS", 
"BP_16_SDVT", "BP_17_GQQQ", "BP_18_AETP", "BP_19_PPSA", "BP_20_DATP", 
"EpQ_1_AYAT", "EpQ_2_HEKL", "EpQ_3_SCSV", "EpQ_4_MAYV", "EpQ_5_LKDP", 
"EpQ_6_ERCE", "EpQ_7_DNPA", "EpQ_8_YGIS", "EpQ_9_GMSS", "EpQ_10_AAKK", 
"EpQ_11_NIRI", "EpQ_12_ERRR", "EpQ_13_MDRE", "EpQ_14_SRQM", "EpQ_15_DWSI", 
"EpQ_16_VLVQ", "EpQ_17_GRTI", "EpQ_18_EKVR", "EpQ_19_PDVA", "EpQ_20_ADVT", 
"LbT_1_RPGG", "LbT_2_TQGD", "LbT_3_EVKS", "LbT_4_VIEM", "LbT_5_GSAD", 
"LbT_6_VRPI", "LbT_7_CELG", "LbT_8_APQQ", "LbT_9_SAEE", "LbT_10_GEAE", 
"LbT_11_EELR", "LbT_12_EWAN", "LbT_13_IKEE", "LbT_14_VSDF", "LbT_15_WEDV", 
"LbT_16_SGGA", "LbT_17_KATN", "LbT_18_EREG", "LbT_19_AWAS", "LbT_20_VDRD", 
"abc_1_CVTQ", "abc_2_KEAP", "abc_3_TAYI", "abc_4_MITN", "abc_5_MPTV", 
"abc_6_TRTG", "abc_7_KSTI", "abc_8_KEAI", "abc_9_HVYS", "abc_10_LGMG", 
"abc_11_VAYQ", "abc_12_AGTG", "abc_13_TDSW", "abc_14_HKKS", "abc_15_YGLA", 
"abc_16_WEEW", "abc_17_HSTI", "abc_18_EKCI", "abc_19_PAGI", …
Run Code Online (Sandbox Code Playgroud)

regex r string-substitution gsub

5
推荐指数
1
解决办法
586
查看次数

与 Ruby :tr 方法等效的 JS 是什么?

在红宝石中我可以这样做:

\n
def DNA_strand(dna)\n  base_hash = { 'A' => 'T', 'T' => 'A', 'G' => 'C', 'C' => 'G' }\n  dna.gsub(/[ATGC]/, base_hash)\nend\n
Run Code Online (Sandbox Code Playgroud)\n

我也可以这样做,这将是完全相同的:

\n
def DNA_strand(dna)\n  Dna.tr(\xe2\x80\x99ACTG\xe2\x80\x99, \xe2\x80\x99TGAC\xe2\x80\x99)\nend\n
Run Code Online (Sandbox Code Playgroud)\n

在JS中是否有与ruby中的:tr等效的方法?

\n

目前我只能想到用JS这样解决这个问题:

\n
function DNAStrand(dna){\n  function matchBase(match, offset, string) {\n    const base = { 'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G' };\n    return `${base[match]}`;\n  }\n  return dna.replace(/[ATGC]/g, matchBase);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

任何意见将不胜感激!

\n

javascript ruby regex string string-substitution

5
推荐指数
1
解决办法
633
查看次数

删除非字符的方法比gsub更短(/\d |\W /,"")

my_string = 'Here's the #: 49848! - but will dashes, commas & stars (*) show?'

puts src.gsub(/\d|\W/, "")
Run Code Online (Sandbox Code Playgroud)

即我可以删除或("|").

这是我如何到达这里,我可以变短吗?

src =  "Here's the #: 49848! - but will dashes, commas & stars (*) show?"
puts "A) - " + src
puts "B) - " + src.gsub(/\d\s?/, "")
puts "C) - " + src.gsub(/\W\s?/, "")
puts "D) - " + src.gsub(/\d|\W\s?/, "")
puts "E) - " + src.gsub(/\d|\W/, "")
puts "F) - " + src

A) - Here's the #: …
Run Code Online (Sandbox Code Playgroud)

ruby regex string string-substitution gsub

4
推荐指数
1
解决办法
1万
查看次数

JQ:如何将被识别为字符串的值相乘?

我正在尝试从交换网络套接字获取一些贸易信息。在我从套接字获取的 JSON 中,值 .p 和 .q 都用双引号括起来。

当我尝试将两个值相乘时,它表示我正在尝试将两个字符串相乘。因此,我通过 tonumber 过滤器传递这些字符串,并且错误消息发生了一些变化,但无法让它真正工作。

JSON:

{"e":"aggTrade","E":1562109562958,"s":"BTCUSDT","a":134343336,"p":"10796.60000000","q":"0.00139000","f":147532295,"l":147532295,"T":1562109562951,"m":false,"M":true}
Run Code Online (Sandbox Code Playgroud)

下面的命令后面是它们的输出:

... | jq  '"\(.p*.q)"'
    jq: error (at <stdin>:1): string ("10796.6000...) and string ("0.00139000") cannot be multiplied
Run Code Online (Sandbox Code Playgroud)

然后:

... | jq  '"\(.p|tonumber*.q|tonumber)"'
jq: error (at <stdin>:1): Cannot index string with string "q"
Run Code Online (Sandbox Code Playgroud)
... | jq  '"\("\(.p|tonumber)"*"\(.q|tonumber)")"'
jq: error (at <stdin>:1): string ("10796.6") and string ("0.00139") cannot be multiplied
Run Code Online (Sandbox Code Playgroud)

我得到的最接近的是下面的代码,但它输出了很多页结果,而我只期望一个结果......

... | jq  '.q as $qtty | "\(.p|tonumber*$qtty|tonumber)"'

Run Code Online (Sandbox Code Playgroud)

或者:

... | jq  '.q as $qtty | "\(.p|tonumber*"\($qtty|tonumber)")"'
Run Code Online (Sandbox Code Playgroud)

它输出的数字太多了!

即使使用 …

bash json multiplication string-substitution jq

4
推荐指数
1
解决办法
2996
查看次数

Gsub是R中关键字后面的每个元素

我想在某个关键字后删除字符串的所有元素.示例:

this.is.an.example.string.that.I.have
Run Code Online (Sandbox Code Playgroud)

期望的输出:

This.is.an.example
Run Code Online (Sandbox Code Playgroud)

我尝试过使用gsub('string', '', list)但只删除单词字符串.我也试过使用,gsub('^string', '', list)但似乎也没有用.

谢谢.

string r string-substitution gsub

3
推荐指数
1
解决办法
238
查看次数

将基本名称的输出通过管道传输到字符串替换

我需要作为 bash 脚本的参数给出的文件的基本名称。基本名称应去掉其文件扩展名。让我们假设$1 = "/somefolder/andanotherfolder/myfile.txt",期望的输出是"myfile"

当前的尝试创建了一个我想避免的中间变量:

BASE=$(basename "$1")
NOEXT="${BASE%.*}"
Run Code Online (Sandbox Code Playgroud)

我尝试将其作为单行代码,通过管道输出 basename 的输出。但是,我不知道如何将标准输出传输到字符串替换。

编辑:这需要适用于可能具有不同长度的多个文件扩展名,因此字符串替换尝试如上所述。

bash file-extension pipe string-substitution basename

3
推荐指数
1
解决办法
998
查看次数

将Perl字符串替换移植到Ruby?

我正在尝试在将Perl脚本移植到Ruby的过程中弄清楚如何进行字符串替换.

这是Perl系列.我想弄清楚Ruby的等价物:

$historyURL =~ s/COMPONENT_NAME/$componentName/g;
Run Code Online (Sandbox Code Playgroud)

对于那些可能知道Ruby而不是Perl的人来说,这行基本上用变量$historyVariable的值替换字符串"COMPONENT_NAME" $componentName.

ruby regex string-substitution

2
推荐指数
1
解决办法
150
查看次数