解析单个键/值的字符串的"ruby方式"是什么?

SWR*_*SWR 11 ruby regex text

我正在尝试解析一个多行字符串,并按照模式获取该行的其余部分.

文本:

hello john
your username is: jj
thanks for signing up

我想提取jj,即"你的用户名是:"之后的所有内容

单程:

text = "hello john\nyour username is: jj\nthanks for signing up\n"
match = text[/your username is: (.*)/]
value = $1
Run Code Online (Sandbox Code Playgroud)

但这让我想起了perl ......并且不像我告诉ruby那样自然地"阅读".

有更干净的方式吗?AKA"红宝石"的方式?

谢谢

out*_*tis 22

您的代码几乎是Ruby方式.如果您不想使用全局$1,可以使用2 arg版本String#[]:

match = text[/your username is: (.*)/, 1]
Run Code Online (Sandbox Code Playgroud)


gle*_*nra 6

分割指令是mindbogglingly有用.它将一个字符串分成一个子串数组,分隔你传入的任何内容.如果你没有给它任何参数,它就会在空格上分割.因此,如果您知道您要查找的单词是第五个"单词"(在空格和返回字符上分开),您可以这样做:

text ="你好john \nyour用户名是:jj \nthanks用于注册\n"
match = text.split [5]

..但也许这不是足够的自我记录,或者你想允许多字匹配.你可以这样做:

midline = text.split("\n")[1]
match = midline.split("username is:").last

或者这可能是更简洁的方式:

match = text [/ username is:(.*)/,1]

  • 哇,谢谢多条攻击路径.;)我没有注意到分裂的可能性,但传入的文本不是静态的(示例被大大简化)所以它不会工作......但它是一个很好的方法来解决问题. (2认同)