如何确保大型text / csv文件中的任何位置都没有重复的单词?

时间:2016-03-10 19:53:11

标签: mysql regex notepad++

EDIT。解决方案:我最终在mysql中创建连接表并使用mysql语句,因为这匹配整个字符串而不是部分。我在notepad ++中使用正则表达式为所有1800多个条目创建语句。例如: UPDATE my_table SET city_id =" 747" WHERE city_id ="城市名称&#34 ;;

我有一个包含1800多行城市名称的文本文件,我需要处理此文件以使用数值替换城市名称,以用作数据库中连接表的主键。我有一个可以执行此操作的强大的shell脚本,但是有大量重复的单词会导致问题。

我的问题是包含相同字词的城市名称' Francisco'例如:

CITY = ID
Francisco = 11
San Francisco = 25
South San Francisco = 35
Franciscoville = 99

我想要实现的目标是:

CITY = ID
11 = 11
25 = 25
35 = 35
99 = 99

我得到的是这个(fyi:看起来我把这些东西放在PS脚本的查找表中的顺序似乎并不重要):

CITY = ID
11 = 11
San 11 = 25
South San 11 = 35
11ville = 99

我想要做的就是提取像#Francisco;#39;示例(即:包含副本的最短字符串)并将它们放入单独的txt文件中。

另外,如果你看一下这个例子,我实际上必须运行几次。一旦我得到了弗朗西斯科'在一个单独的文本文件中,我现在遇到了一个新的重复问题"旧金山"也出现在包含" South San Francisco"。

的行中

非常感谢任何帮助,我希望我能够清楚地理解这个问题。

编辑:我应该注意到我不知道副本实际上有多少或者是什么,我只知道有很多。我想要达到的目的是找到重复的内容然后处理它们。

2 个答案:

答案 0 :(得分:0)

我试图找到替换操作的一般解决方案。

假设您在多行中有单词 Francisco ,并希望为它们分配不同的ID。这是相同的正则表达式。

正则表达式: .*Francisco.*( = (\d*))

<强>解释

  • 这会匹配其中包含Francisco字词的行,然后是ID

替换为: \2\1

  • \2是捕获的ID

  • \1= ID部分。

Regex101 Demo

答案 1 :(得分:0)

替换单词时,需要按照从最长字符串到最短字符串的顺序进行替换。这将消除您的问题,假设没有替换字符串也是搜索字符串(即Apple - &gt; Ball,Ball - &gt; Car)

对于您的示例数据,它将意味着按以下顺序替换:

  1. 南旧金山
  2. Franciscoville
  3. 旧金山
  4. 旧金山