誰かがアラバマ州の旗を購入した場合のように、誤検出には多くの危険があります。
スペースを含む店名のため、これは少し注意が必要です (ウォルマートはスペースで書かれることがよくあります)。
文字列に常に が含まれている場合at [store]
は、文の最後の at を見つけて、他のすべてを切り取って文字列を作成することで、店舗名を抽出できます。
の出現箇所は単語全体としてのみ検索されるため、 、 、at
などのストア名には危険がありません。名前にアットという言葉が入っているお店が思い浮かびません。技術的にはつまずきますが、リスクははるかに低く、そのようなストア名を事前に置き換えることができます.Beats Audio
Sam's Meat Shop
<cfset mystring = "Google Chromecast available at Amazon">
<cfset SellerName = REReplaceNoCase(mystring,".*\b(?:at)\b(?!.*\b(?:at)\b)\s*","")>
<cfoutput>Seller: #Sellername#</cfoutput>
これにより、比較をより安全に行うことができます。
あなたのコメントによると、考えられるすべてのパターンを知っている場合でも、必要に応じてデータを取得できます (アクションに応じて、誤検知は恥ずかしいか壊滅的なものになる可能性があります)。使用しているストアがわかっている場合は、正規表現を使用して次のような文字列を引き出すことができます
<cfset mystring = "Google Chromecast available at Amazon.co.uk">
<cfset SellerName = REReplaceNoCase(mystring,".*\b((Google|Amazon|Wal[\W]*Mart|E[\W]*bay)(\.[a-z]+)*)\b","\1")>
<cfoutput>Seller: #Sellername#</cfoutput>
更新する必要がある唯一の部分は、パイプ区切りのリストです。K-Mart を追加してK[\W]*Mart
、[\W]*
kMart、K-Mart、k*Mart をカバーしますが、Kwik-E-Mart はカバーしないように、特殊文字またはスペースを許可することができます。
更新 #2、コメントごと
<cfset mystring = "Google Chromecast available at Toys-R-US">
<cfset SellerNameRE = REReplace(rsProduct.sellername,"[\W]+","[\W]*","ALL")>
<cfset TheSellerName = REReplaceNoCase(mystring,".*\b((#sellernameRE#)(\.[a-z]+)*)\b","\1")>
<cfoutput>Seller: #TheSellername# (#SellerNameRE#)</cfoutput>
これにより、すべての記号がワイルドカード文字に置き換えられるため、記号が不要になり、Wal*Mart と表示されている場合でも WalMart と一致します。
毎回これを行わないように、「正規表現名」を含む別の列をロードすることもできます。
したがって、テーブルは次のようになります
SellerID SellerName RegexName
1 Wal-Mart Wal[\W]*Mart
2 Toys-R-US Toys[\W]*R[\W]*US
<cfset mystring = "Google Chromecast available at Toys-R-US">
<cfset TheSellerName = REReplaceNoCase(mystring,".*\b((#rsProduct.RegexName#)(\.[a-z]+)*)\b","\1")>
<cfoutput>Seller: #TheSellername# (#SellerNameRE#)</cfoutput>