Tek veya çift tırnak içine alınmış ne zaman bölme bir dize alanı kullanarak düzenli
Düzenli ifadeler yeniyim ve yardım bekleriz. Birlikte örnek dize tek veya çift tırnak içinde olmayan alanlarda kullanarak bölünmüş bir ifade koymaya çalışıyorum. Benim son girişimi şöyle: (?!")
ve oldukça işe yaramıyor. Alıntı önce uzay bölünüyor.
Örnek giriş:
This is a string that "will be" highlighted when your 'regular expression' matches something.
Çıkış istenen:
This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.
"will be"
'regular expression'
kelimeler arasındaki boşluğu korumak unutmayın.
CEVAP
Diğerleri gibi karmaşık düzenli ifadeler ya da bu kadar uzun kod öneriyorlar anlamıyorum. Aslında, ister iki türlü şeyler gelen string: karakter dizileri değil boşluk veya tırnak ve dizilerin karakterleri başlayan ve son bir alıntı, hiçbir tırnak işaretleri arasında, iki çeşit teklif. Kolayca bu düzenli ifade ile o şeyler maç olabilir:
[^\s"'] |"([^"]*)"|'([^']*)'
Listedeki tırnak istemediğin için yakalama grupları ekledim.
Bu Java kod listesini, eğer tırnak işaretleri hariç tutmak için, ve eğer yakalama grubunu maç yoktu ama genel olarak normal ifade eşleşme ekleme tutuyorsa yakalama grubunu ekleme (tırnaksız bir kelime eşleşti) oluşturur.
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"'] |\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
// Add double-quoted string without the quotes
matchList.add(regexMatcher.group(1));
} else if (regexMatcher.group(2) != null) {
// Add single-quoted string without the quotes
matchList.add(regexMatcher.group(2));
} else {
// Add unquoted word
matchList.add(regexMatcher.group());
}
}
Eğer iade listesinde tırnak olmasının bir sakıncası yok, varsa bile, çok daha basit bir kod kullanabilirsiniz:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"'] |\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
Kullanım alanı 'datetime' ve...
JavaScript içinde Tek veya Çift Tırnak...
Ne zaman bir form's opaklık ayarı...
HTML bir dize kullanarak yerleşik DOM ...
Python - Nasıl alt süreci içine bir di...