Рэгулярны выраз: Выманне радкі

Я стараюся, каб атрымаць name1 (першая-радок), name2 (другі шэраг), name3 (трэці радок) і імя-вуліцы (апошняя радок) з рэгулярным выразам:

Company Inc.
JohnDoe
Foobar
Industrieterrein 13

Самая апошняя радок назвы вуліцы і гэтая частка ўжо працуе (тэкст захоўваецца ў зменнай "S2»).

REGEXREPLACE(S2, "(.*\n)+(?!(.*\n))", "")

Гэты выраз верне мне самая апошняя радок. Я таксама ў стане экстракце першы радок:

REGEXREPLACE(S2, "(\n.*)", "")

Мая праблема ў тым, што я не ведаю, як атрымаць другі і трэці шэраг ....

Акрамя таго, як я магу праверыць, калі тэкст утрымлівае адзін, два, тры ці больш радкоў?

Update:

Рэгулярны выраз выкарыстоўваецца ў кантэксце Скрыба (інструмент ETL). Праблема ў тым, што я не магу выконваць праграмны код, у мяне ёсць толькі наступныя функцыі:

  • REGEXMATCH(input, pattern)
  • REGEXREPLACE(input, pattern, replacement)
0
Няма неабходнасці ў рэгулярным выразе, па меншай меры, не для прасунутых супастаўлення з узорам - проста <�я> Раскол тэкст на радкі (з тым, што раскол рэалізацыі ваш мова падае).
дададзена аўтар CBroe, крыніца
Няма неабходнасці ў рэгулярным выразе, па меншай меры, не для прасунутых супастаўлення з узорам - проста <�я> Раскол тэкст на радкі (з тым, што раскол рэалізацыі ваш мова падае).
дададзена аўтар CBroe, крыніца
Дапускае Ці мова lookaheads?
дададзена аўтар Howard, крыніца
Дапускае Ці мова lookaheads?
дададзена аўтар Howard, крыніца
Дапускае Ці мова lookaheads?
дададзена аўтар Howard, крыніца
Якая мова праграмавання вы карыстаецеся? У адваротным выпадку, як мы павінны ведаць, як праверыць, колькі радкоў ёсць?
дададзена аўтар bozdoz, крыніца
<�Код>. *? \ П будзе адпавядаць лініі, таму што гэта не прагны. Я думаю, . * \ П будзе адпавядаць усім.
дададзена аўтар bozdoz, крыніца
<�Код>. *? \ П будзе адпавядаць лініі, таму што гэта не прагны. Я думаю, . * \ П будзе адпавядаць усім.
дададзена аўтар bozdoz, крыніца
Якая мова праграмавання вы карыстаецеся? У адваротным выпадку, як мы павінны ведаць, як праверыць, колькі радкоў ёсць?
дададзена аўтар bozdoz, крыніца
Верагодна, лепшы адказ, чым маё рэгулярны выраз рашэння @CBroe
дададзена аўтар bozdoz, крыніца
Верагодна, лепшы адказ, чым маё рэгулярны выраз рашэння @CBroe
дададзена аўтар bozdoz, крыніца
Верагодна, лепшы адказ, чым маё рэгулярны выраз рашэння @CBroe
дададзена аўтар bozdoz, крыніца
Якая мова праграмавання вы карыстаецеся? У адваротным выпадку, як мы павінны ведаць, як праверыць, колькі радкоў ёсць?
дададзена аўтар bozdoz, крыніца
Так, я мяркую, так. Я, хоць выраз "(. * \ П) + (?! (. * \ П))" выкарыстоўвае lookaheads і гэты выраз працуе.
дададзена аўтар thuld, крыніца
Так, я мяркую, так. Я, хоць выраз "(. * \ П) + (?! (. * \ П))" выкарыстоўвае lookaheads і гэты выраз працуе.
дададзена аўтар thuld, крыніца
Так, я мяркую, так. Я, хоць выраз "(. * \ П) + (?! (. * \ П))" выкарыстоўвае lookaheads і гэты выраз працуе.
дададзена аўтар thuld, крыніца
Рэгулярны выраз выкарыстоўваецца ў кантэксце Скрыба (інструмент ETL). Праблема ў тым, што я не магу выконваць праграмны код, у мяне ёсць толькі наступныя функцыі: «REGEXMATCH (уваход, шаблон)» і «REGEXREPLACE (уваход, шаблон, замена)»
дададзена аўтар thuld, крыніца
Рэгулярны выраз выкарыстоўваецца ў кантэксце Скрыба (інструмент ETL). Праблема ў тым, што я не магу выконваць праграмны код, у мяне ёсць толькі наступныя функцыі: «REGEXMATCH (уваход, шаблон)» і «REGEXREPLACE (уваход, шаблон, замена)»
дададзена аўтар thuld, крыніца

8 адказы

Калі рэгулярны выраз мовы забяспечвае падтрымку lookaheads вы можаце разлічваць радкі ў зваротным кірунку і, такім чынам, атрымаць (пры ўмове, . не адпавядае новага радка)

(.*)$                   # matching the last line
(.*)(?=(\n.*){1}$)      # matching the second last line (excl. newline)
(.*)(?=(\n.*){2}$)      # matching the third last line (excl. newline)
2
дададзена
@thuld Ці правільна я разумею, што вы хочаце захаваць толькі другую лінію? Тады чаму б не выкарыстоўваць REGEXREPLACE (. REGEXREPLACE (уваход "^ * \ п", ""), "\ п (\ п |) *", "") - унутраны замены выдаліць першы лініі і знешні замяніць, каб выдаліць што-небудзь пасля першага.
дададзена аўтар Howard, крыніца
Прывітанне, я магу выкарыстоўваць толькі функцыю «REGEXREPLACE (уваход, шаблон, замена)». Пытанне: Як я выкарыстаць вашы выразы ў дадзеным кантэксце? Так што мне трэба будзе «адпавядаць ўсе, акрамя другой лініі і Repalce з пустым радком»?
дададзена аўтар thuld, крыніца
ды, адна частка патрабаванняў з'яўляецца экстракт другой лініі. Я праверу вашы рэкамендацыі заўтра, дзякуй за дапамогу! Апошняе пытанне: Ці згодныя вы, што гэтая заява будзе трымаць трэці радок? REGEXREPLACE (REGEXREPLACE (REGEXREPLACE (уваход, "^ * \ п.", ""), "^ * \ П", ""), "\ п (& ZWNJ ;. \ П |) *", "")
дададзена аўтар thuld, крыніца

Што тычыцца назваў паведамленняў, якое будзе адпавядаць кожнаму з чатырох радкоў, як пра гэта:

(.*?)\n(.*?)\n(.*?)\n(.*)

Дужкі будуць адпавядаць, а \ п будзе адпавядаць новай лініі. Заўвага: Вы, магчыма, прыйдзецца выкарыстоўваць \ г \ п замест таго, каб проста \ п у залежнасці; паспрабаваць абодва.

1
дададзена
угадвання з Вашага адказу, нешта накшталт REGEXREPLACE (S2 "(. *?) \ п (. *?) \ п (. *?) \ п (. *)", "замяніць \ п \ 2 \ nreplaced \ nreplaced ") . 2 з'яўляецца зваротнай спасылкай. Ён павінен стаяць на 2-й дужкі ў рэгулярным выразе. Але ў залежнасці ад мовы праграмавання, можа быць розным, ці гэта можа быць $ 2 .
дададзена аўтар bozdoz, крыніца
Такім чынам, з гэтым выразам я мог праверыць, калі тэкст змяшчае 1, 2, 3, ... радок. Але як я замяніць усе, акрамя другога шэрагу?
дададзена аўтар thuld, крыніца

Што тычыцца назваў паведамленняў, якое будзе адпавядаць кожнаму з чатырох радкоў, як пра гэта:

(.*?)\n(.*?)\n(.*?)\n(.*)

Дужкі будуць адпавядаць, а \ п будзе адпавядаць новай лініі. Заўвага: Вы, магчыма, прыйдзецца выкарыстоўваць \ г \ п замест таго, каб проста \ п у залежнасці; паспрабаваць абодва.

1
дададзена
угадвання з Вашага адказу, нешта накшталт REGEXREPLACE (S2 "(. *?) \ п (. *?) \ п (. *?) \ п (. *)", "замяніць \ п \ 2 \ nreplaced \ nreplaced ") . 2 з'яўляецца зваротнай спасылкай. Ён павінен стаяць на 2-й дужкі ў рэгулярным выразе. Але ў залежнасці ад мовы праграмавання, можа быць розным, ці гэта можа быць $ 2 .
дададзена аўтар bozdoz, крыніца
Такім чынам, з гэтым выразам я мог праверыць, калі тэкст змяшчае 1, 2, 3, ... радок. Але як я замяніць усе, акрамя другога шэрагу?
дададзена аўтар thuld, крыніца

Што тычыцца назваў паведамленняў, якое будзе адпавядаць кожнаму з чатырох радкоў, як пра гэта:

(.*?)\n(.*?)\n(.*?)\n(.*)

Дужкі будуць адпавядаць, а \ п будзе адпавядаць новай лініі. Заўвага: Вы, магчыма, прыйдзецца выкарыстоўваць \ г \ п замест таго, каб проста \ п у залежнасці; паспрабаваць абодва.

1
дададзена
угадвання з Вашага адказу, нешта накшталт REGEXREPLACE (S2 "(. *?) \ п (. *?) \ п (. *?) \ п (. *)", "замяніць \ п \ 2 \ nreplaced \ nreplaced ") . 2 з'яўляецца зваротнай спасылкай. Ён павінен стаяць на 2-й дужкі ў рэгулярным выразе. Але ў залежнасці ад мовы праграмавання, можа быць розным, ці гэта можа быць $ 2 .
дададзена аўтар bozdoz, крыніца
Такім чынам, з гэтым выразам я мог праверыць, калі тэкст змяшчае 1, 2, 3, ... радок. Але як я замяніць усе, акрамя другога шэрагу?
дададзена аўтар thuld, крыніца

проста выкарыстоўваць гэта рэгулярны выраз:

(.+)+

тлумачу:

. Wildcard: Matches any single character except \n.

+ Matches the previous element one or more times.

0
дададзена

Вы можаце паспрабаваць наступнае:

<�Код> ((. *?) \ П) {3}

0
дададзена

Вы можаце паспрабаваць наступнае:

<�Код> ((. *?) \ П) {3}

0
дададзена

Вы можаце паспрабаваць наступнае:

<�Код> ((. *?) \ П) {3}

0
дададзена