我必須在我的純文本文件中找到所有初始化(captial letter words,如SAP,JSON或XML)。有沒有現成的腳本? Ruby,Python,Perl - 語言無關緊要。到目前爲止,我一無所獲。如何在文本中查找所有初始化?
問候,
斯特凡
我必須在我的純文本文件中找到所有初始化(captial letter words,如SAP,JSON或XML)。有沒有現成的腳本? Ruby,Python,Perl - 語言無關緊要。到目前爲止,我一無所獲。如何在文本中查找所有初始化?
問候,
斯特凡
像/[A-Z]{2,}/
正則表達式應該做的伎倆。
也匹配fooBARbaz等字符串。它不支持國際字符集。 – 2009-08-08 11:34:00
正確,但OP說「純文本」,所以我認爲這將足夠好。如果文本包含這樣的文字,則需要將模式放在\ b標籤中,並且如果使用國際字符集,則必須添加額外的字符。 – 2009-08-08 21:17:51
的Conspicuous Compiler's answer一個更簡單的版本使用-p
標誌切出一切醜陋的循環代碼:
perl -p -e 'm/\b([[:upper:]]{2,})\b/' input.txt
有兩個問題:(1)匹配時打印整行。 (2)每行僅匹配一次,所以不會在一行上得到多個縮寫。你至少需要一個循環。 – 2009-08-08 11:08:03
下面是一個僅打印縮寫的變體,但僅獲取每行的最後一個縮寫: perl -p -e's /.* \ b([[:upper:]] {2,})\ b。*/\ 1 /'textinput.txt – 2009-08-08 11:25:55
@醒目編譯器:好點。我已經要求OP進行一些分類。如果這個答案不夠,我會刪除這個答案。 – 2009-08-08 11:26:34
下面是一個Python 2.x的解決方案,允許位數(參見例子)。 更新:代碼現在適用於Python 3.1,3.0和2.1至2.6(含)。
dos-prompt>type find_acronyms.py
import re
try:
set
except NameError:
try:
from sets import Set as set # Python 2.3
except ImportError:
class set: # Python 2.2 and earlier
# VERY minimal implementation
def __init__(self):
self.d = {}
def add(self, element):
self.d[element] = None
def __str__(self):
return 'set(%s)' % self.d.keys()
word_regex = re.compile(r"\w{2,}", re.LOCALE)
# min length is 2 characters
def accumulate_acronyms(a_set, an_iterable):
# updates a_set in situ
for line in an_iterable:
for word in word_regex.findall(line):
if word.isupper() and "_" not in word:
a_set.add(word)
test_data = """
A BB CCC _DD EE_ a bb ccc k9 K9 A1
It's a CHARLIE FOXTROT, said MAJ Major Major USAAF RETD.
FBI CIA MI5 MI6 SDECE OGPU NKVD KGB FSB
BB CCC# duplicates
_ABC_DEF_GHI_ 123 666 # no acronyms here
"""
result = set()
accumulate_acronyms(result, test_data.splitlines())
print(result)
dos-prompt>\python26\python find_acronyms.py
set(['CIA', 'OGPU', 'BB', 'RETD', 'CHARLIE', 'FSB',
'NKVD', 'A1', 'SDECE', 'KGB', 'MI6', 'USAAF', 'K9', 'MAJ',
'MI5', 'FBI', 'CCC', 'FOXTROT'])
# Above output has had newlines inserted for ease of reading.
# Output from 3.0 & 3.1 differs slightly in presentation.
# Output from 2.1 differs in item order.
語義上,有一類「縮寫詞」,縮寫包括初始字母(由一系列字母的首字母組成)和首字母縮略詞(可以是或不是初始字母的可發音縮寫)。初始主義幾乎總是全部大寫。其他類型的縮寫可能會或可能不會。對於我所知道的「全部大寫詞」,沒有一個簡潔的詞... – 2009-08-08 17:59:33
'\ b'值得使用 – 2009-08-08 21:46:18
@Alexandr:請提供一個具體的例子,說明\'\ b''值得使用的地方/方式。 – 2009-08-08 22:32:32
可以匹配任何大寫字母的單詞嗎?還是您有單獨的首字母縮略詞列表? – 2009-08-08 10:48:20
一個清單將是不錯的。下面提供了適當的解決方案。超級:-) – Stefan 2009-08-08 10:54:39
@Stefan:你已經標記了這個'搜索和替換'。你是否真的試圖用一些東西來替換這些詞? – 2009-08-08 11:22:59