我正試圖使用重碼匹配所有逗號(后面有空格)。, 在任何小括號或方括號之外,即逗號不應包含在小括號或方括號中。
目標字串是A, An(hi, world[hello, (hi , world) world]); This, These。在這種情況下,它應該匹配第一個逗號和最后一個逗號(A和An之間的逗號,this和these)。
所以我可以將A, An(hi, world[hello, (hi , world) world]); This, These拆分為A, An(hi, world[hello, (hi , world) world]); This和These,不會因此而留下不平衡的后綴/括號。
為此,似乎很難單獨使用regex。有什么其他的方法來解決這個問題嗎?
regex運算式是一個很好的例子。
我使用的regex運算式。
, (?! [^()[]]*[)])
但是這個運算式會匹配其他額外的兩個逗號, (第二個和第三個),而這兩個逗號不應該被匹配。
盡管如果它是針對以下字串進行匹配,它將匹配正確的逗號(分別是第一個)。A, An(hi, world) 和 A, An[hi, world]
但如果小括號和大括號相互包含,就會出現問題。
對于這個字串,其匹配情況如前所述:
A, An(hi, world[hello, (hi , world) world]) and this, is that, for [the, one (in, here, [is not, ]) ] and last, here!
^ ^------------------------------------^ ^ ^ ^------------------------------^ ^
- 所以它沒有捕捉到這些括號/小括號組里面的任何逗號,因為它把它們作為一個整體來捕捉。現在,你在外層有了逗號。
uj5u.com熱心網友回復:
zdim提到一種方法是使用核心的Text::Balanced模塊。示范:
#!/usr/bin/env perl
use strict;
使用警告。
use feature qw/say/;
useText::Balanced qw/extract_bracketed/;
my $str = "A, An(hi, world[hello, (hi , world) world]); This, These" ;
my ($inside, $after, $before) = extract_bracketed $str, '()[]', qr/[^([]*/;
my @tokens = (split(/,/, $before/""/span>), $inside, split(/,/, $after//"") )。
# 顯示。
# A An (hi, world[hello, (hi , world) world]) ; This These
say join(' ', @tokens) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323783.html
標籤:
上一篇:匹配除復雜的regex模式外的所有內容,并在Pandas中替換它
下一篇:Dart洗掉所有中間有整數的括號

