Eu tenho várias strings na forma bruta:
[some text] [some number] [some more text]
Eu quero extrair o texto em [algum número] usando as classes Java Regex.
Eu sei aproximadamente que expressão regular eu quero usar (embora todas as sugestões sejam bem-vindas). O que realmente me interessa são as chamadas Java para pegar a sequência regex e usá-la nos dados de origem para produzir o valor de [some number].
EDIT: Devo acrescentar que só estou interessado em um único [algum número] (basicamente, a primeira instância). As strings de origem são curtas e não vou procurar várias ocorrências de [algum número].
Respostas:
Exemplo completo:
Como você está procurando o primeiro número, pode usar esse regexp:
e
m.group(1)
retornará o primeiro número. Observe que os números assinados podem conter um sinal de menos:fonte
Resultado:
fonte
Allain basicamente tem o código java, então você pode usá-lo. No entanto, a expressão dele corresponde apenas se seus números forem precedidos apenas por um fluxo de caracteres de palavras.
deve ser capaz de encontrar a primeira sequência de dígitos. Você não precisa especificar o que está antes, se tiver certeza de que será a primeira sequência de dígitos. Da mesma forma, não há como especificar o que está depois, a menos que você queira. Se você deseja apenas o número e tem certeza de que será a primeira sequência de um ou mais dígitos, é tudo o que precisa.
Se você espera que seja compensado por espaços, tornará ainda mais distinto especificar
pode ser melhor.
Se você precisar das três partes, isso fará:
EDITAR As expressões dadas por Allain e Jack sugerem que você precisa especificar algum subconjunto de não-dígitos para capturar dígitos . Se você informar o mecanismo regex que está procurando
\d
, ele ignorará tudo antes dos dígitos. Se a expressão de J ou A se encaixa no seu padrão, a correspondência inteira é igual à sequência de entrada . E não há razão para especificá-lo. Provavelmente retarda uma partida limpa, se não for totalmente ignorada.fonte
Além do Pattern , a classe Java String também possui vários métodos que podem trabalhar com expressões regulares; no seu caso, o código será:
onde
\\D
é um caractere sem dígito.fonte
No Java 1.4 e superior:
fonte
Esta função coleta todas as seqüências correspondentes da string. Neste exemplo, todos os endereços de email são retirados da string.
Para
message = "[email protected], <[email protected]>>>> [email protected]"
isso irá criar lista de 3 elementos.fonte
Tente fazer algo assim:
fonte
.+
avidamente consome caracteres,\d+
apenas captura o"3"
de"123"
. Além disso, dentro de literais de string, você precisa escapar da barra invertida (seu exemplo não será compilado).Solução Simples
Solução em uma classe Util
fonte
Olha, você pode fazê-lo usando StringTokenizer
Como estamos levando esses dados numéricos para três variáveis diferentes, podemos usá-los em qualquer lugar do código (para uso posterior)
fonte
Que tal
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
eu acho que iria cuidar de números com parte fracionária. Incluí espaços em branco e incluí,
como possível separador. Estou tentando obter os números de uma string, incluindo flutuadores, e levando em consideração que o usuário pode cometer um erro e incluir espaços em branco ao digitar o número.fonte
Às vezes, você pode usar o método simples .split ("REGEXP") disponível em java.lang.String. Por exemplo:
fonte
fonte
se você estiver lendo do arquivo, isso poderá ajudá-lo
fonte