如何根据前缀和后缀选择字符串,而不是它们

时间:2011-01-21 12:44:01

标签: regex notepad++

我有一组像这样的字符串(每个“空格”是一个表格):

29  301 3   31  0       TREZILIDE       Trézilidé
2A  001 1   73  1   (LE)    AFA (Le)    Afa

我想要的是将其转化为:

29301 Trézilidé
2A001 (Le) Afa
  • 压制第一个表格
  • 抑制制表,数字和第一个大写的出现(并用空格替换整个东西)
  • 用空格替换最后一个表格

我的更大问题是:

  • 如何在不选择“前缀”和“后缀”的情况下选择第一个列表? (例如^(..)\t[0-9]但未选择^(..)[0-9]
  • 如何从3位数之后选择到大写单词列表之后?

我在带有Notepad ++的搜索和替换工具箱的文本文件中执行此操作

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

  

如何选择第一个制表而不选择“前缀”和“后缀”?

最好这是使用前瞻和后瞻断言完成的,但Notepad ++不支持6.0之前的版本。下一个最佳解决方案是捕获它们,然后在替换字符串中反向引用它们。

我是这样做的(回答你的完整问题):

  1. 检查匹配大小写以执行区分大小写的查找

  2. 通过正则表达式查找:

    ^(..)\t(\d\d\d)[\tA-Z0-9()]+\t(.+)$
    

    替换为:

    \1\2 \3
    

    我最终得到了这个,其中<tab>代表了一个实际的制表:

    29301 Trézilidé
    2A001 (Le)<tab>Afa
    
  3. 为了摆脱这种情况,我做了一个扩展的发现:

    \t
    

    并用空格字符替换它,以获得最终结果:

    29301 Trézilidé
    2A001 (Le) Afa
    

答案 1 :(得分:1)

尝试

^(..)\t

替换为

\1

然后

\(*[A-Z][A-Z]+\)*

替换为空字符串,同时删除(LE)和AFA。

''

然后

^(.....).*(\t[A-Za-z]+)+$

的更换:

\1 \2

最后:

\t

替换为空格。每一次出现。

HTW