Como posso extrair uma substring de dentro de uma string no Ruby?
Exemplo:
String1 = "<name> <substring>"
Eu quero extrair substringde String1(ou seja, tudo dentro da última ocorrência de <e >).
Como posso extrair uma substring de dentro de uma string no Ruby?
Exemplo:
String1 = "<name> <substring>"
Eu quero extrair substringde String1(ou seja, tudo dentro da última ocorrência de <e >).
Respostas:
String1.scan(/<([^>]*)>/).last.first
scancria uma matriz que, para cada um <item>em String1contém o texto entre o <eo >numa matriz de um elemento (porque, quando usado com uma expressão regular que contém grupos de captura, digitalização cria uma matriz contendo as capturas para cada jogo). lastfornece a última dessas matrizes e, em firstseguida, fornece a string nela.
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
Não há necessidade de usar scan, se precisarmos de apenas um resultado.
Não há necessidade de usar o Python match, quando temos o Ruby String[regexp,#].
Veja: http://ruby-doc.org/core/String.html#method-i-5B-5D
Nota: str[regexp, capture] → new_str or nil
if we need only one resultna minha solução. E match()[]é mais lento, porque são dois métodos em vez de um.
string[regex]pode ser tão legível nesse cenário, que foi o que eu usei pessoalmente.
Você pode usar uma expressão regular para isso facilmente ...
Permitindo espaços ao redor da palavra (mas não mantendo-os):
str.match(/< ?([^>]+) ?>\Z/)[1]
Ou sem os espaços permitidos:
str.match(/<([^>]+)>\Z/)[1]
<>realmente seja a última coisa na string. Se, por exemplo, a string foo <bar> bazfor permitida (e supostamente fornecer o resultado bar), isso não funcionará.
Aqui está uma abordagem um pouco mais flexível usando o matchmétodo Com isso, você pode extrair mais de uma sequência:
s = "<ants> <pants>"
matchdata = s.match(/<([^>]*)> <([^>]*)>/)
# Use 'captures' to get an array of the captures
matchdata.captures # ["ants","pants"]
# Or use raw indices
matchdata[0] # whole regex match: "<ants> <pants>"
matchdata[1] # first capture: "ants"
matchdata[2] # second capture: "pants"