簡體   English   中英

使用 ruby​​ 在正則表達式中選擇一個字符串

[英]Select a string in regex with ruby

我必須清理傳入參數的字符串,並刪除所有小寫字母和所有特殊字符,除了:

  • +
  • |
  • ^
  • 空間
  • =>
  • <=>

所以我在參數中傳遞了這個字符串:

aA azee + B => C=

我需要清理這個字符串才能得到這個結果:

A + B => C

我願意

string.gsub(/[^[:upper:][+|^ ]]/, "")

輸出: "A + BC"

我不知道如何在 ruby​​ 中選擇帶有正則表達式的=> (以及<=> )字符串)

我知道,如果我將 string.gsub(/[^[:upper:][+|^ => ]]/, "") 添加到我的正則表達式中,則傳入參數的字符串中的最后一個=也將被選中

您可以嘗試另一種方法:匹配您想要保留的所有內容,然后加入結果。

您可以使用此正則表達式來匹配您想要保留的所有內容:

[A-Z\d+| ^]|<?=>

正如你所看到的,這只是一個 using | []創建要保留的字符串列表:大寫、數字、+、|、空格、^、=> 和 <=>。

示例:

"aA azee + B => C=".scan(/[A-Z\d+| ^]|<?=>/).join()

輸出:

"A  + B => C"

請注意,“A”和“+”之間有 2 個連續的空格。 如果你不想要,你可以調用String#squeeze

請參閱此處使用的正則表達式

(<?=>)|[^[:upper:]+|^ ]
  • (<?=>) <=>=>捕獲到捕獲組 1
  • [^[:upper:]+|^ ]匹配任何不是大寫字母(與[AZ]相同)或+字符, | , ^或空格

在此處查看正在使用的代碼

p "aA azee + B => C=".gsub(/(<?=>)|[^[:upper:]+|^ ]/, '\1')

結果: A + B => C

r = /[a-z\s[:punct:]&&[^+ |^]]/

"The cat, 'Boots', had 9+5=4 ^lIVEs^ leF|t.".gsub(r,'')
  #=> "T  B  9+54 ^IVE^ F|"

正則表達式為:“匹配不是字符'+'' ''|'小寫字母、空格和標點符號'^' . &&在字符類中是集合交集運算符。這里它將匹配az\\s[:punct:]的字符集與匹配[^+ |^]的字符集相交。(請注意,這包括空格除了空格。)有關更多信息,請在Regexp 中搜索“字符類也支持 && 運算符”。

我沒有包括'=>''<=>'作為那些,不像'+'' ''|' '^'是多字符串,因此需要一種與簡單地刪除某些字符不同的方法。

暫無
暫無

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

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