我正在嘗試過濾字串串列,例如:
List<String> names = ["NAM", "XYZ", " QWE (HJB)", " XYZ (NAM)", "(NAM)"];
在使用正則運算式時,我想將每個字串與包含“NAM”或“HJB”的字串進行比較,并列印出包含過濾器字串的每個名稱字串。所以最后它會列印出所有帶有“NAM”的東西(還有“ XYZ(NAM)”,但沒有特殊字符)
我的代碼看起來像這樣,但無論哪種方式,我都能捕獲所有內容(“ QWE (HJB)”)
regexp3 = RegExp(r'[a-zA-Z] ');
或者什么都沒有
final regexp2 = RegExp(r'^\ .([a-zA-Z] ) \(([a-zA-Z] ).\).$');
因為如果我只用“NAM”過濾(例如),它會給我一個空錯誤。
完整的代碼。
void main() async {
List<String> names= ["TEX","TOL"," TEX (TOL)"," TOL (TEX)", "(NAM)"];
List<String> filter = ["TEX", "TOL"];
final regexp3 = RegExp(r'[a-zA-Z] ');
for(var e in names){
if(filter.contains(regexp3.firstMatch(e)!.group(0))) {
print(e);
}
}
}
uj5u.com熱心網友回復:
撰寫正則運算式模式確實給我們帶來了輕微的眼球震顫。但是,重要的是要注意正則運算式組的編號。據我了解,您想獲取.group(1)之后的第一個括號捕獲的內容\ 。
為了正確匹配字串,我還.從正則運算式模式中洗掉了一些字符。
除了提供安全的默認值而不是在空值上拋出錯誤之外,!用?and替換了 bang 運算子 ( ) ??。
祝你好運!
void main() async {
List<String> names= ["TEX","TOL"," TEX (TOL)"," TOL (TEX)", "(NAM)"];
List<String> filter = ["TEX", "TOL"];
final regexp3 = RegExp(r'^\ ([a-zA-Z] ) \(([a-zA-Z] )\)$');
for(var e in names){
var regroup = regexp3.firstMatch(e)?.group(1);
if(filter.contains(regroup)) {
print(e '\t\t' (regroup ?? ''));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369068.html
