【问题标题】:Ruby empty String regex [duplicate]Ruby空字符串正则表达式[重复]
【发布时间】:2020-10-26 00:56:37
【问题描述】:

除了.match(""),还有其他方法可以指定我的字符串也可以包含一个空字符串以及其他一些东西吗? 到目前为止,我的正则表达式如下所示:

s = /(?<beginString>[\sA-Za-z\.]*)(?<marker1>[\*\_]+)(?<word>[\sA-Za-z]+)(?<marker2>[\*\_]+)(?<restString>[\sA-Za-z\*\_\.]*)/ =~ myString

现在我想为 beginString 分配一个空字符串,因为程序递归运行。我希望能够向这个函数传递一个像"*this* _is_ ***a*** _string_" 这样的字符串,所以如您所见,beginString 很有可能必须为空才能读取下一个标记。 最后我希望我的程序打印这个:

{"01"=>#<Textemph @content="this ">, "02"=>#<Textemph @content="is">, 
"11"=>#<Textstrongemph @content="a">, "12"=>#<Textemph @content="string">}

我认为如果我可以在 [ ] 中添加类似 \nil 的内容,它可能会解决我的问题。 请告诉我如何在//-form 中添加.match("")

感谢您的帮助

【问题讨论】:

    标签: regex ruby


    【解决方案1】:

    匹配字符串开头和字符串结尾

    要匹配 Ruby 中的空字符串,您可以使用 \A\z 原子来匹配字符串的开头紧跟字符串的结尾。例如:

    "".match /\A\z/
    #=> #<MatchData "">
    

    请注意,这与/^$/ 不同,/^$/ 不会像您预期的那样处理换行符。考虑:

    "\n".match /\A\z/
    #=> nil
    
    "\n".match /^$/
    #=> #<MatchData "">
    

    要正确检测空字符串,您需要使用 string 匹配器的开始/结束而不是 的开始/结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多