Java рэгулярны выраз разбіць радок коскі, але ігнараваць двукоссі, а таксама круглыя ​​дужкі

Я затрымаўся з гэтым рэгулярным выразам.

Такім чынам, у мяне ёсць уваход як:

    <�Літый> "Кран прылады, (фізічны аб'ект)" (x1, x2, x4), а не "наведванне даследчай медсёстры (знаходжанне)", EntirePatellaBodyStructure (X1, X8), "Besnoitia wallacei (арганізм)", «Catatropis (арганізм ) "(x1, x2, x4), а не IntracerebralRouteQualifierValue," Хурма Вірджынскага (арганізм) "(x1, x2, x4), а не SuturingOfHandProcedure (Х1) </літый>

і ў рэшце рэшт, я хацеў бы атрымаць гэта:

    <�Літый> "Кран прылада, (фізічны аб'ект)" (x1, x2, x4) </літый>
  • не «вочы даследчай медсястрой (азнаямленчая)"
  • <�Літый> EntirePatellaBodyStructure (Х1, х8) </літый> <�Літый> "Besnoitia wallacei (арганізм)" </літый> <�Літый> "Catatropis (арганізм)" (x1, x2, x4) </літый>
  • ня IntracerebralRouteQualifierValue
  • <�Літый> "Хурма Вірджынскага (арганізм)" (x1, x2, x4) </літый>
  • ня SuturingOfHandProcedure (X1)

Я паспрабаваў рэгулярны выраз

(\'[^\']*\')|(\"[^\"]*\")|([^,]+)|\\s*,\\s*

Гэта працуе, калі ў мяне няма коскі ўнутры дужак.

5
цікавае пытанне. Цікава, што хурму трэба рабіць з каленамі або ручнымі швамі. :-)
дададзена аўтар Jason S, крыніца
цікавае пытанне. Цікава, што хурму трэба рабіць з каленамі або ручнымі швамі. :-)
дададзена аўтар Jason S, крыніца
Падобна на тое, што вы хочаце тут паўнавартасны парсер, а не рэгулярныя выразы.
дададзена аўтар fge, крыніца
Падобна на тое, што вы хочаце тут паўнавартасны парсер, а не рэгулярныя выразы.
дададзена аўтар fge, крыніца
нічога асаблівага не і () !
дададзена аўтар Anirudha, крыніца
@JasonS Я хацеў было дублікатам. Я выдаткаваў больш за 2-х гадзін, спрабуючы знайсці рашэнне тут. І я лічыў, што пытанне.
дададзена аўтар Vadim Ivanov, крыніца
@JasonS Я хацеў было дублікатам. Я выдаткаваў больш за 2-х гадзін, спрабуючы знайсці рашэнне тут. І я лічыў, што пытанне.
дададзена аўтар Vadim Ivanov, крыніца
гэта на самай справе Prolog каманды, але ў дадзеным выпадку "не" не ўплывае. Акрамя таго, у дужках уяўляе сабой зменныя, але гэта можа быць пустым.
дададзена аўтар Vadim Ivanov, крыніца
гэта на самай справе Prolog каманды, але ў дадзеным выпадку "не" не ўплывае. Акрамя таго, у дужках уяўляе сабой зменныя, але гэта можа быць пустым.
дададзена аўтар Vadim Ivanov, крыніца

7 адказы

<�Моцны> RegEx

(\w+\s)?("[^"]+"|\w+)(\(\w\d(,\w\d)*\))?

<�Моцны> Java Code

String input = ... ;
Matcher m = Pattern.compile(
          "(\\w+\\s)?(\"[^\"]+\"|\\w+)(\\(\\w\\d(,\\w\\d)*\\))?").matcher(input);
while(matcher.find()) {
    System.out.println(matcher.group());
}

<�Моцны> Выхад

"Crane device, (physical object)"(X1,x2,x4)
not "Seen by research nurse (finding)"
EntirePatellaBodyStructure(X1,X8)
not "Besnoitia wallacei (organism)"(X1,x2,x4)
not "Catatropis (organism)"(X1,x2,x4)
not IntracerebralRouteQualifierValue
not "Diospyros virginiana (organism)"(X1,x2,x4)
not SuturingOfHandProcedure(X1)
3
дададзена
Праверыць абнаўлення. Дададзена рэгулярны выраз у адпаведнасці з вашымі новымі патрабаваннямі.
дададзена аўтар Ravi Thapliyal, крыніца
Дзякуй, вялікае !!
дададзена аўтар Vadim Ivanov, крыніца
з прыкладам, які я даў у вашай Regex на літару выдатна працуе. Але, на жаль, з абноўленымі напрыклад няма, у прыватнасці, частка без усякіх двукоссяў. Але дзякуй ў любым выпадку, я буду старацца палепшыць яго.
дададзена аўтар Vadim Ivanov, крыніца

<�Моцны> RegEx

(\w+\s)?("[^"]+"|\w+)(\(\w\d(,\w\d)*\))?

<�Моцны> Java Code

String input = ... ;
Matcher m = Pattern.compile(
          "(\\w+\\s)?(\"[^\"]+\"|\\w+)(\\(\\w\\d(,\\w\\d)*\\))?").matcher(input);
while(matcher.find()) {
    System.out.println(matcher.group());
}

<�Моцны> Выхад

"Crane device, (physical object)"(X1,x2,x4)
not "Seen by research nurse (finding)"
EntirePatellaBodyStructure(X1,X8)
not "Besnoitia wallacei (organism)"(X1,x2,x4)
not "Catatropis (organism)"(X1,x2,x4)
not IntracerebralRouteQualifierValue
not "Diospyros virginiana (organism)"(X1,x2,x4)
not SuturingOfHandProcedure(X1)
3
дададзена
Праверыць абнаўлення. Дададзена рэгулярны выраз у адпаведнасці з вашымі новымі патрабаваннямі.
дададзена аўтар Ravi Thapliyal, крыніца
Дзякуй, вялікае !!
дададзена аўтар Vadim Ivanov, крыніца
з прыкладам, які я даў у вашай Regex на літару выдатна працуе. Але, на жаль, з абноўленымі напрыклад няма, у прыватнасці, частка без усякіх двукоссяў. Але дзякуй ў любым выпадку, я буду старацца палепшыць яго.
дададзена аўтар Vadim Ivanov, крыніца

Don't use regexes for this. Write a simple parser that keeps track of the number of parentheses encountered, and whether or not you are inside quotes. For more information, see: RegEx match open tags except XHTML self-contained tags

1
дададзена

Don't use regexes for this. Write a simple parser that keeps track of the number of parentheses encountered, and whether or not you are inside quotes. For more information, see: RegEx match open tags except XHTML self-contained tags

1
дададзена

Калі выказаць здагадку, што няма ніякай магчымасці ўкладзенасці () у () , і няма магчымасці (скажам) \ " у " » , вы можаце напісаць нешта накшталт:

private static final Pattern CUSTOM_SPLIT_PATTERN =
    Pattern.compile("\\s*((?:\"[^\"]*\"|[(][^)]*[)]|[^\"(]+)+)");
private static final String[] customSplit(final String input) {
    final List ret = new ArrayList();
    final Matcher m = CUSTOM_SPLIT_PATTERN.matcher(input);
    while(m.find()) {
        ret.add(m.group(1));
    }
    return ret.toArray(new String[ret.size()]);
}

(Адмова ад адказнасці: не тэсціравалі).

0
дададзена

гэта зрабіць б тое, што вам трэба?

System.out.println(yourString.replaceAll(", not", "\nnot"));
0
дададзена
Мне вельмі шкада, што я даў дрэнны прыклад. Вядома, "не" не абавязаны тут.
дададзена аўтар Vadim Ivanov, крыніца
Ах добра, цяпер я разумею, з абноўленым прыкладам, я ўпэўнены, што адзін з іншых рабят рашэння будзе працаваць для вас тады.
дададзена аўтар John484, крыніца

гэта зрабіць б тое, што вам трэба?

System.out.println(yourString.replaceAll(", not", "\nnot"));
0
дададзена
Мне вельмі шкада, што я даў дрэнны прыклад. Вядома, "не" не абавязаны тут.
дададзена аўтар Vadim Ivanov, крыніца
Ах добра, цяпер я разумею, з абноўленым прыкладам, я ўпэўнены, што адзін з іншых рабят рашэння будзе працаваць для вас тады.
дададзена аўтар John484, крыніца