博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby 字符串操作(和 Python3 字符串操作进行对比)
阅读量:4229 次
发布时间:2019-05-26

本文共 13195 字,大约阅读时间需要 43 分钟。

本来是想写到 Ruby 学习笔记一块的,但是字符串操作这块的内容确实太多了,所以单独提取出来了。

Ruby 和 Python 两种语言都支持单引号和双引号的字符串。话不多说,直接上菜(为了对比明显,Ruby 中尽量去掉括号)!

字符串中嵌入变量

# Ruby[1] pry(main)> name1 = "Joe"=> "Joe"[2] pry(main)> name2 = "Mary"=> "Mary"[3] pry(main)> puts "你好 #{name1},  #{name2} 在哪?"你好 Joe,  Mary 在哪?=> nil
# Python3>>> name1 = "Joe">>> name2 = "Mary">>> print(f"你好 {name1}, {name2} 在哪?")你好 Joe, Mary 在哪?

 字符串内建方法

# Ruby[4] pry(main)> myStr = String.new("THIS IS TEST")=> "THIS IS TEST"[5] pry(main)> foo = myStr.downcase=> "this is test"[6] pry(main)>  [7] pry(main)> puts "#{foo}"this is test=> nil[8] pry(main)>
# Python3>>> myStr = str("THIS IS TEST")>>> myStr'THIS IS TEST'>>> foo = myStr.lower()>>> foo'this is test'

字符串自我复制

# Ruby[9] pry(main)> aa = "hello world"=> "hello world"[10] pry(main)> aa * 3=> "hello worldhello worldhello world"
# Python3>>> aa = "hello world">>> aa * 3'hello worldhello worldhello world'

字符串拼接

# Ruby[11] pry(main)> "hello" + " world"=> "hello world"[12] pry(main)> "hello" << " world"=> "hello world"
# Python3>>> "hello" + " world"'hello world'

字符串比较

# Ruby[13] pry(main)> "hello" < "world"=> true[14] pry(main)> "hello" <=> "world"=> -1[15] pry(main)> "hello" == "world"=> false
# Python3>>> "hello" < "world"True>>> 0 if "hello" == "world" else (-1 if "hello" < "world" else 1)-1>>> "hello" == "world"False

正则表达式匹配

# Ruby[18] pry(main)> "hello world" =~ /ll/=> 2[19] pry(main)> "hello world" =~ /o.*o/=> 4[5] pry(main)> "hello world".match(/o.*o/)=> #
# Python3>>> import re>>> re.search("ll", "hello world")<_sre.SRE_Match object; span=(2, 4), match='ll'>>>> re.search("o.*o", "hello world")<_sre.SRE_Match object; span=(4, 8), match='o wo'>

字符串子串

# Ruby[19] pry(main)> "hello world"[0,5]=> "hello"[20] pry(main)> "hello world"[0...5]=> "hello"[21] pry(main)> "hello world"[/o.*o/]=> "o wo"
# Python3>>> "hello world"[0:5]'hello'>>> "hello world"[0:-6]'hello'

str.capitalize(str.capitalize!)

# Ruby[27] pry(main)> aa = "hello world"=> "hello world"[28] pry(main)> aa.capitalize=> "Hello world"[29] pry(main)> aa=> "hello world"[30] pry(main)> aa.capitalize!=> "Hello world"[31] pry(main)>
# Python3>>> aa = "hello world">>> aa.capitalize()'Hello world'>>> aa'hello world'>>> aa = aa.capitalize()>>> aa'Hello world'

str.casecmp(不区分大小写的字符串比较)

# Ruby[34] pry(main)> "hello".casecmp "He5l5"=> 1[35] pry(main)> "hello".casecmp "HeLLo"=> 0[36] pry(main)> "hello".casecmp "world"=> -1
# Python3>>> "hello".lower() == "HeLLo".lower()True

str.center

# Ruby[41] pry(main)> "hello".center 10=> "  hello   "
# Python3>>> "hello".center(10)'  hello   '

str.chars

# Ruby[2] pry(main)> "hello".chars=> ["h", "e", "l", "l", "o"]or[5] pry(main)> hello = []=> [][6] pry(main)> "hello".each_byte{|item| hello << item.chr}=> "hello"[7] pry(main)> hello=> ["h", "e", "l", "l", "o"]
# Python3>>> hello = "hello">>> hello = list("hello")>>> hello['h', 'e', 'l', 'l', 'o']

str.chomp(str.chomp!)

# Ruby[46] pry(main)> "hello\n".chomp!=> "hello"[47] pry(main)> "hello".chomp!=> nil[48] pry(main)> "hello\n".strip!=> "hello"[49] pry(main)> "hello".strip!=> nil
# Python3>>> "hello\n".strip()'hello'

 str.chop(str.chop!)

# Ruby[50] pry(main)> "hello".chop=> "hell"[51] pry(main)> "hello".chop!=> "hell"
# Python3>>> "hello"[:-1]'hell'

str.concat(other_str)

# Ruby[53] pry(main)> "hello".concat " world"=> "hello world"[3] pry(main)> aa = "hello"=> "hello"[4] pry(main)> aa.concat(" world")=> "hello world"[5] pry(main)> aa=> "hello world"
# Python3>>> aa = "hello">>> aa += " world">>> aa'hello world'

str.count

# Ruby[54] pry(main)> "hello".count 'l'=> 2
# Python3>>> "hello".count('l')2

str.crypt

# Ruby[55] pry(main)> "hello".crypt "world"=> "woglQSsVNh3SM"

str.delete(str.delete!)

字符串中出现在后面参数中的每个字符都会从原字符串中删除。

# Ruby[57] pry(main)> "hello".delete "ho"=> "ell"
# Python3>>> "hello".replace("h", "").replace("o", "")'ell'

str.delete_ prefix(str.delete_ prefix!)

# Ruby[1] pry(main)> aa = "hello hello world"=> "hello hello world"[2] pry(main)> aa.delete_prefix "hello"=> " hello world"[3] pry(main)> aa=> "hello hello world"[4] pry(main)> aa.delete_prefix! "hello"=> " hello world"[5] pry(main)> aa=> " hello world"
# Python3>>> aa = "hello hello world">>> aa'hello hello world'>>> aa.replace("hello", "", 1) if aa.startswith("hello") else aa' hello world'

str.delete_ suffix(str.delete_ suffix!)

# Ruby[6] pry(main)> aa = "hello world world"=> "hello world world"[7] pry(main)> aa.delete_suffix "world"=> "hello world "[8] pry(main)> aa=> "hello world world"[9] pry(main)> aa.delete_suffix! "world"=> "hello world "[10] pry(main)> aa=> "hello world "
# Python3>>> aa = "hello world world">>> aa'hello world world'>>> aa[:aa.rindex("world")] if aa.endswith("world") else aa'hello world '

str.downcase(str.downcase!)

# Ruby[58] pry(main)> "Hello".downcase=> "hello"
# Python3>>> "Hello".lower()'hello'

str.dump

# Ruby[59] pry(main)> "Hello".dump=> "\"Hello\""

str.each_byte

# Ruby[64] pry(main)> "Hello world".each_byte{|substr| puts substr}7210110810811132119111114108100
# Python3>>> [print(ord(item)) for item in "Hello world"]7210110810811132119111114108100

str.each_char

# Ruby[48] pry(main)> "hello".each_char{|char| puts char}hello=> "hello"
# Python3>>> [print(char) for char in "hello"]hello[None, None, None, None, None]

str.each_line

# Ruby[67] pry(main)> "hello\nworld".each_line{|substr| puts substr}helloworld=> "hello\nworld"
# Python3>>> [print(item) for item in "hello\nworld".split()]helloworld[None, None]

str.empty?

# Ruby[69] pry(main)> "hello".empty?=> false[70] pry(main)> "".empty?=> true
# Python3>>> "hello" == ""False>>> "" == ""True

str.equal?

# Ruby[73] pry(main)> "hello".equal? "hello"=> false[74] pry(main)> aa = "hello" => "hello"[75] pry(main)> aa.equal? aa=> true
# Python3>>> "hello" is "hello"True>>> "hello" == "hello"True>>> aa = ['hello', 'world']>>> bb = ['hello', 'world']>>> aa == bbTrue>>> aa is bbFalse

str.eql?

# Ruby[71] pry(main)> "hello".eql? "hello"=> true
# Python3>>> aa = ['hello', 'world']>>> bb = ['hello', 'world']>>> aa == bbTrue>>> aa is bbFalse

str.gsub(pattern, replacement) [or] str.gsub(pattern) { |match| block }

# Ruby[9] pry(main)> "hello world".gsub(/o.*o/, "*")=> "hell*rld"[10] pry(main)> "hello world".gsub(/o.*o/){|match| "*"}=> "hell*rld"[11] pry(main)> "hello world".gsub("l", "*")=> "he**o wor*d"
# Python3>>> "hello world".replace("l", "*")'he**o wor*d'

str.hash

# Ruby[76] pry(main)> "hello".hash=> 4132711420684197129
# Python3>>> hash("hello")-7700562595699703259

str.hex

# Ruby[77] pry(main)> "hello".hex=> 0[78] pry(main)> "afcde".hex=> 720094

str.include?

# Ruby[2] pry(main)> "hello world".include?"hello"=> true
# Python3>>> "hello" in "hello world"True

str.index

# Ruby[84] pry(main)> "hello".index("e")=> 1[85] pry(main)> "hello".index("ll")=> 2[86] pry(main)> "hello world".index(/o.*o/)=> 4
# Python3>>> "hello".index("e")1>>> "hello".index("ll")2>>> "hello world".index("o.*o")Traceback (most recent call last):  File "
", line 1, in
ValueError: substring not found>>>

str.insert

# Ruby[87] pry(main)> "hello".insert(3, '---')=> "hel---lo"
# Python3# Python3 里边字符串是不可改变的,要想达到效果,可剑走偏锋>>> aa = "hello">>> aa[:3] + '---' + aa[3:]'hel---lo'

str.lines

# Ruby[1] pry(main)> "hello world".lines=> ["hello world"][2] pry(main)> "hello\nworld".lines=> ["hello\n", "world"]
# Python3>>> "hello world".splitlines(keepends=True)['hello world']>>> "hello\nworld".splitlines(keepends=True)['hello\n', 'world']

str.ljust(str.rjust)

# Ruby[91] pry(main)> "hello".ljust(10, '-')=> "hello-----"[92] pry(main)> "hello".rjust(10, '-')=> "-----hello"
# Python3>>> "hello".ljust(10, '-')'hello-----'>>> "hello".rjust(10, '-')'-----hello'

str.lstrip(str.lstrip!)

# Ruby[93] pry(main)> "  hello".lstrip=> "hello"[93] pry(main)> "  hello".lstrip!=> "hello"
# Python3>>> "  hello".lstrip()'hello'

str.replace

# Ruby[6] pry(main)> "hello".replace("world")=> "world"
# Python3>>> "hello".replace("hello", "world")'world'

str.reverse(str.reverse!)

# Ruby[7] pry(main)> "hello world".reverse=> "dlrow olleh"
# Python3>>> "".join(list(reversed("hello world")))'dlrow olleh'

str.rstrip(str.rstrip!)

# Ruby[94] pry(main)> "hello  ".rstrip=> "hello"[95] pry(main)> "hello  ".rstrip!=> "hello"
# Python3>>> "hello  ".rstrip()'hello'

str.size(str.length)

# Ruby[89] pry(main)> "hello".size=> 5[90] pry(main)> "hello".length=> 5
# Python3>>> len("hello")5

str.strip(str.strip!)

# Ruby[97] pry(main)> "  hello  ".strip=> "hello"[98] pry(main)> "  hello  ".strip!=> "hello"
# Python3>>> "  hello  ".strip()'hello'

str.start_with? (str.end_with?)

# Ruby[7] pry(main)> "hello".start_with? "he"=> true[8] pry(main)> "hello".start_with? "te"=> false[9] pry(main)> "hello".end_with? "lo"=> true[10] pry(main)> "hello".end_with? "to"=> false
# Python3>>> "hello".startswith("he")True>>> "hello".startswith("te")False>>> "hello".endswith("lo")True>>> "hello".endswith("to")False

str.scan

# Ruby[11] pry(main)> "hello world hello world".scan(/o.*?o/)=> ["o wo", "o wo"]
# Python3>>> re.findall("o.*?o", "hello world hello world")['o wo', 'o wo']

str.split

如果 pattern 是一个单一的空格,那么 str 是基于空格进行分割,会忽略前导空格和连续空格字符。

# Ruby[19] pry(main)> "hello world".split "l"=> ["he", "", "o wor", "d"][1] pry(main)> "I    am   Looking".split=> ["I", "am", "Looking"][2] pry(main)> "I    am   Looking".split(' ')=> ["I", "am", "Looking"]# 分隔的符号也可以不止一个[19] pry(main)> "hello world".split(/o|l/)=> ["he", "", "", " w", "r", "d"]
# Python3>>> "hello world".split("l")['he', '', 'o wor', 'd']>>> "I    am   Looking".split()['I', 'am', 'Looking']>>> "I    am   Looking".split(' ')['I', '', '', '', 'am', '', '', 'Looking']

str.squeeze([other_str]*) [or] str.squeeze!([other_str]*)

使用为 String#count 描述的程序从 other_str 参数建立一系列字符。返回一个新的字符串,其中集合中出现的相同的字符会被替换为单个字符。如果没有给出参数,则所有相同的字符都被替换为单个字符。

简单理解就是:str 中的连续相同字符 char 如果在 str.chars & other_str.chars 里边,那么它只在 str 出现一次。

没有 other_str 的话,默认把左右连续相同字符都变成一个。

# Ruby[31] pry(main)> "hello".squeeze("world")=> "helo"[32] pry(main)> "heello".squeeze("world")=> "heelo"[47] pry(main)> "hetello".squeeze("world")=> "hetelo"[57] pry(main)> "helllo world".squeeze=> "helo world"
# Python3

str.sub(str.sub!)

# Ruby[99] pry(main)> "hello world".sub("world", "hello")=> "hello hello"[100] pry(main)> "hello world".sub!("world", "hello")=> "hello hello"[102] pry(main)> "hello world".sub("world"){|match| "hello"}=> "hello hello"[103] pry(main)> "hello world".sub("world"){"hello"}=> "hello hello"# 看下边,只替换了一处哟,和 gsub 的区别应该在于 gsub 的 g 代表 global,即全局替换。[14] pry(main)> "hello world".sub("l", "*")=> "he*lo world"
# Python3>>> "hello world".replace("l", "*", 1)'he*lo world'

str.succ,str.next(str.succ!, str.next!)

# Ruby[104] pry(main)> "hello".succ=> "hellp"[105] pry(main)> "hello".next=> "hellp"
# Python3# 你就当成是字符串的 26 进制加法,这儿只是其中一步,整个是不对的哟# 后边如果有时间我可以用 Python3 写个实现上面的方法>>> aa = "hello">>> bb = aa[:-1] + chr(ord(aa[-1]) + 1)>>> bb'hellp'>>>

str.sum

# Ruby[106] pry(main)> "hello".sum=> 532[107] pry(main)> "hello".sum(n=16)=> 532

str.swapcase(str.swapcase!)

# Ruby[108] pry(main)> "HeLLo".swapcase=> "hEllO"[109] pry(main)> "HeLLo".swapcase!=> "hEllO"
# Python3>>> "HeLLo".swapcase()'hEllO

str.to_f

# Ruby[110] pry(main)> "HeLLo".to_f=> 0.0[111] pry(main)> "12.34".to_f=> 12.34
# Python3>>> float("HeLLo")Traceback (most recent call last):  File "
", line 1, in
ValueError: could not convert string to float: 'HeLLo'>>> float("12.34")12.34

str.to_i

# Ruby[118] pry(main)> "12.34".to_i=> 12[119] pry(main)> "a12.34".to_i=> 0
# Python3>>> int("12.34")Traceback (most recent call last):  File "
", line 1, in
ValueError: invalid literal for int() with base 10: '12.34'>>> int("12")12

str.to_s(str.to_str)

# Ruby[120] pry(main)> "hello".to_s=> "hello"[121] pry(main)> "hello".to_str=> "hello"
# Python3>>> str("hello")'hello'

str.to_sym

# Ruby[88] pry(main)> "hello".to_sym=> :hello

str.tr(str.tr!)

如果你熟悉 Linux 下的 tr 命令的话,这儿就比较好理解了,tr 前后字符串的长度不会发生变化。

# Ruby[127] pry(main)> "hello".tr("he","g")=> "ggllo"[128] pry(main)> "hello".tr("he","gx")=> "gxllo"[129] pry(main)> "hello".tr("he","gxx")=> "gxllo"[130] pry(main)> "hello".tr("he","gxt")=> "gxllo"

str.tr_s(str.tr_s!)

# Ruby[134] pry(main)> "hello".tr_s("he","g")=> "gllo"[135] pry(main)> "hello".tr_s("he","gg")=> "gllo"[136] pry(main)> "hello".tr_s("he","gx")=> "gxllo"[137] pry(main)> "hello".tr_s("he","gxr")=> "gxllo"

str.upcase(str.upcase!)

# Ruby[138] pry(main)> "Hello".upcase=> "HELLO"[139] pry(main)> "Hello".upcase!=> "HELLO"
# Python3>>> "Hello".upper()'HELLO'

str.upto

# Ruby[131] pry(main)> "Hello".upto("Hellz"){|s| puts s}HelloHellpHellqHellrHellsHelltHelluHellvHellwHellxHellyHellz=> "Hello"

骚操作哟!

%w[hello world] 

# Ruby[3] pry(main)> %w[hello world]=> ["hello", "world"]

%i[hello world]   

# Ruby[11] pry(main)> %i[hello world]=> [:hello, :world]

heredoc

无缩进

# Ruby# test.rbputs <<~EOF  hello world,  I am Looking  Nice to meet youEOF------------------------------------------------------------[root@master ruby_learning]# ruby test.rbhello world,I am LookingNice to meet you

有缩进

# Ruby# test.rbputs <<-EOF  hello world,  I am Looking  Nice to meet youEOF------------------------------------------------------------[root@master ruby_learning]# ruby test.rb  hello world,  I am Looking  Nice to meet you

to be continued

# Ruby
# Python3

 

转载地址:http://scjqi.baihongyu.com/

你可能感兴趣的文章
AI把爱豆变胖视频火遍B站,我们找到了背后的技术团队:你是怎么把刘亦菲变胖的?...
查看>>
白硕:区块链技术与数据隐私(附视频)
查看>>
数据蒋堂 | 报表工具的SQL植入风险
查看>>
AAC ADTS LATM 格式分析
查看>>
【转载】嵌入式系统 Boot Loader 技术内幕
查看>>
【转载】uboot学习笔记
查看>>
分布式消息中间件(rabbitMQ篇)
查看>>
JAVA程序员养成计划之JVM学习笔记(2)-垃圾收集管理
查看>>
JAVA程序员养成计划之JVM学习笔记(3)-JVM性能监控
查看>>
POJ 3580
查看>>
POJ 2482
查看>>
POJ 3363
查看>>
[LeetCode] 849. Maximize Distance to Closest Person @ python
查看>>
axi总线介绍
查看>>
Linux内核中ioremap映射的透彻理解
查看>>
ffs的另外一种实现方法
查看>>
strtol的用法
查看>>
工作队列的使用
查看>>
让vim显示空格,及tab字符 vim 多行注释
查看>>
利用mmc_test.c研究mmc模块
查看>>