В ложных срабатываниях существует большая опасность, например, если кто-то покупает государственный флаг штата Алабама.
Из-за названий магазинов, содержащих пробелы, это немного сложно (Wal Mart часто записывается с пробелом).
Если ваша строка всегда содержит at [store]
, вы можете извлечь имя магазина, найдя последнее в предложении и создав строку, отрубив все остальное.
Потому что он ищет вхождения 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.
Update # 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 ,
Вы также можете загрузить отдельную колонку с именами «Regex Names», чтобы вы не делали этого каждый раз.
Так что ваша таблица будет выглядеть как-то
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>
Что вернется? Любое число, отличное от 0, означает, что это совпадение. Он должен вернуть что-то около 25 (позиция 'Amazon' начинается в строке. –
Мне очень жаль, я неправильно ввел значения. Я обновил сообщение, чтобы показать правильные значения. –
Вы ищете' Amazon. com', и это не в строке. –