Предполагая, что вы уже разделяете запятые и пытаетесь проверить, являются ли полученные элементы числами, используйте это выражение: ^\d+(?:\.\d+)?$
, что означает: «должно начинаться с цифр, за которыми может следовать точка и хотя бы еще одна цифра»,
Это будет соответствовать 31
, а также 7.8
, но не 2.
, 6 6 6 6
или 2m54
.
Ниже приведено объяснение этого выражения по частям:
^
означает: совпадения должны начинаться с первого символа $
означает: совпадения должны заканчиваться последним символом, поэтому оба вместе означают, что вся строка должна совпадать \d+
означает: одна или несколько цифр (?: ... )
- это группа без захвата, позволяющая применить квантификатор ?
\.
означает: буквальная точка (?:\.\d+)?
, таким образом, означает: ноль или один вхождения точки, за которой следует хотя бы одна цифра
Редактировать: если вам нужны только целые числа, просто удалите группу: ^\d+$
-> весь ввод должен состоять из одной или нескольких цифр.
Редактировать 2: Если вы можете добавить и добавить запятую к строке ввода (см. Редактировать 4), вы сможетеиспользуйте это регулярное выражение для получения всех чисел: (?<=,)\s*(\d+(?:\.\d+)?)\s*(?=,)
(только для целых чисел потребуется удалить часть (?:\.\d+)?
).
Это выражение получает все числа между двумя запятыми с возможными пробелами между запятыми и номером и захватывает число в группу.Это должно предотвратить совпадения 6 6 6 6
или 2m54
.Затем просто переберите совпадения, чтобы получить все группы.
Редактировать 3: Вот пример с вашей входной строкой.
String input = "test\n" +
"t,b\n" +
"45,49\n" +
"31,34,38,34,56,23,,,,3,23,23653,3875,3.7,8.5,2.5,7.8,2., 6 6 6 6 ,\n" +
",\n" +
".\n" +
".,/;,jm.m.,,n ,sdsd, 3,2m54,2 4,2m,ar ,SSD A,,B,4D,CE,S4,D,2343ES,SD\n";
Pattern p = Pattern.compile( "(?<=,|\\n)\\s*(\\d+(?:\\.\\d+)?)\\s*(?=,|\\n)" );
Matcher m = p.matcher( input );
List<String> numbers = new ArrayList<String>();
while(m.find())
{
numbers.add( m.group( 1 ) );
}
System.out.println(Arrays.toString( numbers.toArray() ));
//prints: [45, 49, 31, 34, 38, 34, 56, 23, 3, 23, 23653, 3875, 3.7, 8.5, 2.5, 7.8, 3]
//removing the faction group: [45, 49, 31, 34, 38, 34, 56, 23, 3, 23, 23653, 3875, 3]
Редактировать 4: на самом деле, вам не нужно добавлятьзапятые, просто используйте это выражение:
`(?<=,|\n|^)\s*(\d+)\s*(?=,|\n|$)`
Группы в начале и конце означают, что совпадение должно следовать за началом ввода, запятой или переводом строки и сопровождаться концом ввода,запятая или разрыв строки.