簡體   English   中英

Ruby regex將組合詞單詞用句點分隔

[英]Ruby regex get the word combo separated by period

我正在嘗試使用Ruby正則表達式來獲取單詞組合,如下所示。 在下面的示例中,我只需要情況1-4,*用大寫字母表示,以便於測試。 中間的單詞( dbo, bcd )可以是情況3中的任何東西。 我在如何使雙重期限案例3正常工作方面遇到麻煩。 也可以將獨立的SALES用作單詞,但這也可能很好,但是對於一個正則表達式來說,可能太多了。 這是我的腳本,部分起作用,需要添加alpha..SALES

 s = '1 alpha.dbo.SALES    2 alpha.bcd.SALES    3 alpha..SALES    4 SALES
      bad cases 5x alpha.saleS  6x  saleSXX'

 regex = /alpha+\.+[a-z]+\.?sales/ix
 puts 'R: ' + s.scan(regex).to_s

##R: ["alpha.dbo.SALES", "alpha.bcd.SALES"]
s = '1 alpha.dbo.SALES    2 alpha.bcd.SALES    3 alpha..SALES    4 SALES
bad cases 5x alpha.saleS  6x  saleSXX 7x alpha.abc.SALES.etc'

regex = /(?<=^|\s)(?:alpha\.[a-z]*\.)?(?:sales)(?=\s|$)/i
puts 'R: ' + s.scan(regex).to_s

輸出:

R: ["alpha.dbo.SALES", "alpha.bcd.SALES", "alpha..SALES", "SALES"]
r = /
    (?<=\d[ ])        # match a digit followed by a space in a positive lookbehind
    (?:               # begin a non-capture group
      \p{Alpha}+        # match one or more letters
      \.                # match a period
      (?:               # begin a non-capture group
        \p{Alpha}+      # match one or more letters
        \.              # match a period
        |               # or
        \.              # match a period
      )                 # end non-capture group
    )?                  # end non-capture group and optionally match it
    SALES             # match string
    (?!=[.\p{Alpha}]) # do not match a period or letter (negative lookahead)
    /x                # free-spacing regex definition mode.

s.scan(r)
  #=> ["alpha.dbo.SALES", "alpha.bcd.SALES", "alpha..SALES", "SALES"]

該正則表達式通常如下編寫。

r = /
    (?<=\d )(?:\p{Alpha}+\.(?:\p{Alpha}+\.|\.))?SALES(?!=[.\p{Alpha}])/

在自由間距模式下,必須在字符類( [ ] )中放置空格; 否則它將被剝離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM