文本读取和替换算法

时间:2009-12-02 20:09:24

标签: java algorithm text

看着这个:

MENU_ITEM_BACK#0="Back";
MENU_ITEM_BLOCK_CHANNEL#0="Block";
MENU_ITEM_CLOSE#0="Close";
MENU_ITEM_DETAILS#0="Details";
MENU_ITEM_DIAGNOSE#0="Diagnose";
MENU_ITEM_DOWNLOAD#0="Download";

......依此类推(超过500行)。什么是自动将标签名称复制到标签本身的最佳方法。例如,

MENU_ITEM_BACK#0="Back";

会变成

MENU_ITEM_BACK#0="MENU_ITEM_BACK";

我最熟悉Java但不反对任何其他编程语言,尽管我对正则表达式(至少是编码语言)不是很熟悉。

编辑:我注意到'#0 ='并不总是不变的。有时它们可​​以被一个非常随意的数字替换,例如'#6548135 ='。给出的答案很好,但由于我不熟悉正则表达式,你会如何适应这个?请注意,我不想复制数字,只是标签。

4 个答案:

答案 0 :(得分:2)

我认为正则表达式是一个不错的选择,假设标签不能包含任何#个字符。只需更换

^([^#]+#0)=".*";$

 \1="\1";

如果要在程序或脚本中执行此操作,则需要使用所选语言的正则表达式设置。

如果您只想为此特定文件执行此操作一次,则可以使用sed:

执行此操作
$ sed -e "s/^([^#]+#0)=".*";$/\1=\"\1\"/" file

答案 1 :(得分:1)

正则表达式,例如使用sed:

sed -r 's/^([^#]+)([^=]+)=.*$/\1\2="\1"/' yourfile.txt

Python中的相同内容:

import sys
import re

for line in sys.stdin.readlines():
    print re.sub('^([^#]+)([^=]+)=.*$', r'\1\2="\1"', line).rstrip()

用法:

python program.py < yourfile.txt

答案 2 :(得分:1)

使用正则表达式搜索和替换,例如使用Perl,sed,awk或许多最近的文本编辑器支持。

在Perl中,这可以解决问题:

my $text = <<END_YOUR_TEXT;
PUT YOUR TEXT HERE
END_YOUR_TEXT
$text =~ s/(MENU_ITEM_[^#]+)#0="[^"]+";/$1#0="$1";/g
print $text;

“$ 1”是对带括号的匹配的引用,例如MENU_ITEM_BACK。

要从命令行中的文件中读取文本,请将其插入:

我的$ text =&lt;&gt ;;

答案 3 :(得分:1)

您可以在不使用Microsoft Word的正则表达式的情况下执行此操作。将代码部分复制到Word中。然后使用列选择(按住alt键并用鼠标选择),然后将其复制到右侧,并使用搜索和替换进行清理。