2009-12-02 79 views
0

看着這樣的:文本閱讀和替換算法

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 ='。給出的答案很好,但由於我對正則表達式不熟悉,你會如何適應這個問題?請注意,我不想複製數字,只是標籤。

+0

#0是恆定的嗎?你熟悉sed嗎?紅寶石?蟒蛇? – 2009-12-02 20:18:41

回答

1

您可以使用Microsoft Word在沒有正則表達式的情況下執行此操作。將代碼的部分複製到Word中。然後使用列選擇(按住Alt鍵並用鼠標選擇),然後將其複製到右側,並使用搜索和替換進行清理。

+0

列選擇如何與不同大小的列一起工作? – 2009-12-03 14:11:42

+0

這裏有一種方法:在每一行的右側添加一個空格。在第一行中,添加足夠的空格,因此它是最長的行。選擇所有行的列,足夠寬以包含每個名稱和尾部空格。將列粘貼到右側足夠遠,以便它不與任何文本重疊。第一行的空格將允許這樣做。即使行長度不同,它也可以工作。 – xpda 2009-12-03 15:48:40

+0

我是個白癡。在excel中花了2分鐘。 – Jay 2009-12-03 20:28:13

2

我認爲正則表達式是一個不錯的選擇,假設標籤不能有任何#字符。只需使用

\1="\1"; 

更換

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

如果你想這樣做的一個程序或腳本,您需要使用您的選擇的正則表達式語言設施。

如果你想爲只是一次爲這個特定文件做到這一點,你可以用SED做到這一點:

$ sed -e "s/^([^#]+#0)=".*";$/\1=\"\1\"/" file 
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 
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。

來讀取在命令行一個文件中的文本,啜它:

我的$文字= <>;