2017-05-31 70 views
-3

在我的測試步驟中,我需要分割字母。如何在紅寶石中分割字符串?

find(:xpath,"//*[]").text 

給像"No#xyz1",其中No#是一個靜態部分的字符串。我需要xyz1。我如何獲得該部分?

+1

請張貼你做了一些努力。 – Surya

+0

您遇到的問題是什麼? –

+0

請閱讀「[mcve]」和鏈接頁面。你需要證明你的努力,並提供證明問題的最小輸入。 –

回答

0

有很多方法可以做到這一點。你可以,例如,使用正則表達式和掃描方法:

[1] pry(main)> "No#xyz1".scan(/No#(.+)/).first.first 
=> "xyz1" 

或「僞」分裂上串太:

[4] pry(main)> "No#xyz1".split("No#") 
=> ["", "xyz1"] 
[5] pry(main)> "No#xyz1".split("No#").last 
=> "xyz1" 

我建議第一個,雖然。

+0

請注意,如果字符串中不存在「否#」,則這兩種方法都會失敗。我不知道期望的行爲是什麼。 –

1

String#[]positive lookbehind就派上用場了:

"No#xyz1"[/(?<=No#).*/] 
#⇒ "xyz1" 

因此,在你匹配,你可以使用:

find(:xpath,"//*[]").text[/(?<=No#).*/] == "xyz1" 
+0

或者'text [/ No#(。*)/,1]'。 – Stefan

0

String#partition正常工作在這裏。

在字符串中搜索sep或pattern(regexp),並在它之前,匹配以及它之後的部分返回部分 。如果找不到, 會返回兩個空字符串和str。

"No#xyz1".partition("No#") 
# => ["", "No#", "xyz1"] 
"No#xyz1".partition("NotHere") 
# => ["No#xyz1", "", ""] 

所以,你可以使用:

"No#xyz1".partition("No#").last 
# => "xyz1"