2011-01-20 4 views
4

Я ищу некоторые советы о том, как я могу принять строку как:RegEx для сопоставления строк, которые имеют только один C

KIGABCCA TQABCCAXT 
GABCCASZYU GZTTABCCA MHNBABCCA CLZGABCA ABCCALZH 
ABCCADQRNS VIZABCCA GABCCAG 
UEKABCCA KBTOABCCA GABCCAMFFJ HABCCAISOJ OFJJABCCA HPABCCA 
WBXRABCCA 
ABCCAKH 
VABCCAJX WBDOABCCA ABCCAWM GCABCA QHRABCCA 
ABCCAMDDD WPABCCAD OGABCCA 
TVABCCA JGLABCA 
IUABCCA 

и вернуть любой всю строку только один C в нем.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я НЕ ИЩУ РЕШЕНИЕ!

Только некоторые указатели или описание конструкций, на которые я должен обратить внимание.

Я уже много лет тружусь над этим, и из-за этого я подошел к кому-то больно. Это вопрос домашней работы, и я не собираюсь обманывать, просто руководство.

Я много читал о Reg Ex, и я их понимаю.

Я не ищу руководство для новичков.

+0

Это одна большая строка с пробелами? –

+0

Правильно. Решение должно возвращать строку символов без пробелов. – Alex

+0

Ваш учитель (?) Попросил вас выполнить это с RegEx исключительно? Если да, то какая платформа? –

ответ

3

Вы хотите сначала поставить границу слова в начале и в конце. Затем сопоставьте любой символ, который не является C или границей слов 0 или более раз, затем C, а затем еще один символ, который не является границей C или слова 0 или более раз. Таким образом, он будет соответствовать C на своем собственном, или C с любыми символами не C, либо (или и той и другой).

Не-C или граница слов, которую вы могли бы сделать двумя способами ... сказать «любой символ, который не является границей C или слова», или вы могли бы сказать «Я хочу A, B или что-нибудь из D-Z». Вам решать.

+0

Спасибо. Это фиксированная. –

+1

OP утверждает, что он не хочет решения, но некоторые рекомендации и описание конструкций, которые ему нужны. Вы решили проблему для него. –

+0

Я использую 'Pattern p = Pattern.compile (" \ b [^ C \ b] * C [^ C \ b] * \ b "); Matcher m = p.matcher (data); '... Но он, похоже, не содержит групп. – Alex

3

Поиск по шаблону, который имеет следующие элементы, в следующем порядке:

  1. Начало строки или любой пробел.
  2. Нулевые или более не-пробельные символы, отличные от C.
  3. A "C"
  4. Нулевые или более не-пробельные символы, отличные от C.
  5. Конец строки или любые пробелы.
+0

Я знаю, я это сделал ... и это работает в принципе, но на практике у меня были проблемы ... Спасибо за советы – Alex

+0

@AlexW, фактическое регулярное выражение (как литерал строки Java) будет ' «(\\ A | \\ s) [^ C \\ s] * C [^ C \\ s] * (\\ s | \\ z)" '- это то, что вы пробовали? И используете ли вы метод 'find()' для применения регулярного выражения? –

+0

@Alan - теперь я отсортирован, основываясь на советах от SO. Теперь я использую find(). Оцените это. Оставьте ответ, и я могу отметить как правильно? – Alex

0

вы можете создать функцию подсчета. затем передайте ему каждую строку. просто пример

String string = "KIGABCCA" 
public static boolean countChar(String string, char ch){ 
    int count =0; 
    for(int i = 0; i<string.length();i++){ 
     if(string.charAt(i) == ch){ 
      count++; 
     } 
    } 
    if (count == 1){ 
     return true; 
    }else { 
     return false; 
    } 
} 
+0

Мне действительно нужно чистое решение RegEx ... – Alex

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