2012-02-10 3 views
2

У меня есть следующие строки, которые я хочу запустить регулярное выражение (Java) против:Как извлечь это с помощью регулярных выражений

a#d3d,b#3jjf,c#44k 
c#999,b#a1a,a#11a 

Я хочу, чтобы извлечь значение после «C#» и до следующего запятая (,). Я хочу извлечь значение «44k» из первой строки и значение «999» из второй строки. Я подумал, что следующее будет работать:

но это не так. О, и английское объяснение регулярного выражения поможет мне лучше понять ваш ответ.

+0

см. Это: http://rubular.com/r/ckRwasekcd – diEcho

+0

как насчет C# между ними, как b # a1a, C# 999, a # 11a, хотите ли вы также извлечь это? – XepterX

ответ

4

Здесь продвинутая версия просмотра назад

(?<=c#)[^,\s]+ 

Посмотреть here on Regexr

(?<=c#) является утверждением просмотра назад, он гарантирует, что существует c# на левой часть рисунка.

[^,\s]+ является отрицательным символьным классом, вместе с квантором + он будет соответствовать хотя бы одному символу, который не является запятой или пробелом.

+0

Ваш шаблон не захватывает, может быть, добавить некоторые '(...)'? – hochl

+0

Я не использую группу захвата, потому что я сопоставляю только соответствующую часть, поэтому результат - полное совпадение, нет необходимости в группе захвата. – stema

+0

Хммм хорошо действительная точка там. – hochl

2
c#([^,\s]+) 

Это должно быть сделано. Найдите c#, а затем возьмите один или несколько символов, которые не являются запятой или пробелом (это означает, что конец строки также заканчивает совпадение).

+0

Если шаблон не является многострочным, \ s не будет соответствовать вводу. – shift66

+0

no, multiline влияет только на поведение символа '.'. –

+0

ОК, извините thats rigth – shift66

1

c#(.+?)(,|$) использовать это регулярное выражение
.+? ленивый регулярное выражение. Он будет соответствовать всем, пока не найдет запятую или конец строки.
И после этого matcher.group (1) вернет вам то, что вам нужно.

0

Вам нужен нежадным подстановочные:

c#.*?(,|$) 

В .*? средство соответствует любому символу ноль или более раз, но соответствовать как можно. (,|$) означает запятую или конец строки.

+0

Я думаю, вы должны заменить '*' на '+'. – hochl

0

вы можете использовать это регулярное выражение

(c#(.{3}[^, ]+)|$)+ 

Это регулярное выражение будет соответствовать C#, который находится в начале и в последней C# в конце строки. C# между строкой не принимается во внимание, я надеюсь, что это то, что вы хотели.

Чтобы получить подстроку C#, такую ​​как «44k» или «999», вам нужно будет использовать подстроку api в String java для извлечения значений из регулярного выражения.

Надеется, что это помогает

1

Я пробовал (?<=c#)[a-z0-9]+ и получил то, что вы хотели.

Смежные вопросы