Выберите строку с запятой (регулярное выражение) - PullRequest
1 голос
/ 29 октября 2009

Мне нужно регулярное выражение, которое соответствует следующему:

'"test foo bar", "test"' => no match
'"test, foo bar", "test"' => "test, foo bar"
'"test, foo bar"' => "test, foo bar"
'"test foo bar"' => no match
'"test", "test, foo"' => "test, foo"
'"test", ","' => no match
'"test", 0, 0, "foo"' => no match

регулярное выражение должно соответствовать любым строкам, которые содержат запятую

Я начал с \".+?\", но он выбирает до следующей строки, что для меня неприменимо.

Редактировать: спасибо, я понял это со всей вашей помощью \"[\w]+?,.+?\"

Ответы [ 5 ]

2 голосов
/ 29 октября 2009

Вы обязательно должны сделать это в одном регулярном выражении? Я бы использовал одно регулярное выражение для разбиения строки на составные части, а затем просто перебрал бы те, чтобы найти первое с запятой.

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

("[^"]*")(?:, ("[^"]*"))*

Вполне возможно, что движок Java regex не позволит вам получить несколько совпадений для одной и той же группы захвата, однако ... Я почти уверен, что вы можете использовать это в .NET достаточно легко, но это может быть немного сложнее на Яве. Вам может нужно что-то вроде:

(?:^|, )("[^"]*")

потреблять «либо начало строки, либо запятую, за которой следует пробел» до начала фактической строки.

Все это все еще просто пытается разделить текст на части - хотя он не пытается найти первую строку, содержащую запятую ... но это может быть отправной точкой для этого. К сожалению, в этот момент мое regex-fu заканчивается - я все равно буду делать это «разделить, а затем повторить»:)

1 голос
/ 29 октября 2009
"[^,"]+?,[^"]+?"
1 голос
/ 29 октября 2009

Попробуйте это: \"[^\"]*,[^\"]*\".

1 голос
/ 29 октября 2009

Вы пробовали:

"[^"]?,[^"]+?"

Это будет соответствовать ", любому символу, не являющемуся" один или несколько раз до запятой, запятой, любому символу, не являющемуся "один или несколько раз до", и "

0 голосов
/ 29 октября 2009

Я понял это с вашей помощью \"[\w]+?,.+?\"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...