2016-07-21 11 views
1

不要な文字を削除する方法がわかりません。文字列内の特定のパターンを削除する方法またはパターンを含む配列要素を削除する方法

以下は、私の配列データのサンプルです。私は "Rail National"のすべての出来事を取り除くか、または "Rail National"という文字列を含む要素を削除したいと思います。

sample array from need to remove text "Rail National" or part of this string

+0

クエリを使用して配列に追加したり、他のデータをループしていますか? – TRose

+0

delimeter \ nを使って文字列から配列を準備しています。 正規置換関数を使ってみましたが、正規表現が役立つかもしれませんが正規表現についてよくわかりません: – user1728565

+0

配列要素が文字列を含んでいればそれを削除しますか?何も残っていないが、テキストを削除した後に空の文字列がある場合はどうすればよいでしょうか? –

答えて

1

私が正しくあなたの質問を理解していれば、これは完全にどこでもそれで「国民のレール」のテキストを含む配列から任意の要素を削除します:

newArray = [ 
    'Adult Child Class', 
    'Ticket Type', 
    'I rail national Rail Nation', 
    'Rail Nationa', 
    'Rail National', 
    'Route'] 
// Remove items from the array 
.filter(function(i){ 
    return !(findNocase(i, 'Rail National') > 0); 
// Edit items in the array 
}).map(function(i){ 
    return replaceNocase(i, 'il Nati', '', 'all'); 
}); 

フィルタ機能を実行します配列内の各項目に対してクロージャを行い、クロージャがtrueを返す場合にのみ、その項目を最終配列に返します。

http://cfdocs.org/arrayfilter

マップ機能は、潜在的に修飾された各項目に配列を返すであろう。

http://cfdocs.org/arraymap

注、あなたが使っているものをCFエンジン言いませんでした。このサンプルコードはLucee Server上で動作します。

+0

問題は "il Nati"のようにテキストの一部も削除したいですか "National" – user1728565

+0

申し訳ありませんが、私はあなたが望んでいることを理解していませんより明確に質問を編集してください可能性のある入力のリストと期待される出力を提供していますか? –

0
<!--- your data ---> 
<cfset yourArray = [ 

    "Adult Child class", 
    "Ticket type", 
    "Elk NIL StD RTN", 
    "ANYTIME R", 
    "Start Date", 
    "Number", 
    "I Rail National Rail Nation", 
    "Valid unt", 
    "Rail Nationa", 
    "price" 

]> 

<!--- array for filtered data ---> 
<cfset filteredArray = []> 

<cfloop array="#yourArray#" index="element"> 

    <!--- remove elements (by skipping) that contain "Rail National" (case insensitive) ---> 
    <cfif element contains "Rail National"> 
     <cfcontinue> 
    </cfif> 

    <!--- remove all occurences of substring "il Nati" (case insensitive) in element ---> 
    <cfset element = replaceNoCase(element, "il Nati", "", "ALL")> 

    <!--- additional filters ---> 
    <!--- ... ---> 

    <!--- add/keep element ---> 
    <cfset filteredArray.add(element)> 

</cfloop> 

<cfdump var="#filteredArray#"> 
+0

上記の私のコードでは、私の例は同じことをするでしょう。私のスクリプトはただのスクリプトであり、高次関数。私は行動する地図()で始めましたが、私は正直なところ、OPが望んでいるものを正確に把握することはできません。 –

+0

私はOPがこの種のデータ操作を扱う方法を求めていたと思うので、できるだけ冗長にしました。また、OPにはCFの対象バージョンは言及されていないので、私はCF9互換コードを提案しました。あなたの答えは間違っていません、Brad。 – Alex

0

Aの正規表現版は、要求通り:

CR=chr(13); 
myRegEx="(^|[\n])[^Rr\n]*Rail Nationa[^\n]*([\n]|$)"; 
myArray=myArray.toList(CR).ReReplace(myRegEx,CR,"ALL").ListToArray(CR); 

A少し短いチェーン:

CR=chr(13); 
myRegEx="(^|[\n])[^Rr\n]*Rail Nationa[^\n]*([\n]|$)"; 
myList=ArrayToList(myArray,CR); 
myList=ReReplace(myList,myRegEx,CR,"All"); 
myArray=ListToArray(myList,CR); 

Aは、正規表現のバージョンをチェーン

myArray=myArray.toList(CR).ReplaceAll(myRegEx,CR).ListToArray(CR); 

インデントバージョン - しばしば好ま1ライナー以上:

myArray=myArray 
    .toList(CR) 
    .ReplaceAll(myRegEx,CR) 
    .ListToArray(CR); 
関連する問題