[英]How can I use regex to search for repeating word in a string in Python?
[英]How to use regex to search in a string
我現在使用正則表達式處理一些字符串,現在我有一個特殊的字符串,不容易使用正則表達式來處理。 下面是一些示例字符串。 TP-LINK是一個示例,它可以是具有類似格式的其他路由器供應商 。
TP-LINK Wireless Range Extender WA810RE
TP-LINK Wireless WA850RE
TP-LINK Wireless Range Extender WA850RE
TP-LINK Wireless Range Extender WA890RE
正如你在上面的字符串中看到的那樣,我想獲得TP-LINK
,而不是使用TL
和WA850RE
,那么最終的結果是TLWA850RE
我在正則表達式中使用前瞻,但它似乎不起作用。
re1 = 'TP-LINK Wireless Range Extender WA850RE'
m1 = re.search('(T(?=P-)L(?=INK)(.+)(WA\\w+))', re1)
關於原始正則表達式的一些注意事項:
T(?:P-)
而不是T(?=P-)
,但如果它們只出現一次(如果不需要放置T(?=P-)
,你甚至不需要它們小組后面的*
, +
或?
) "
實際上並不是字符串的一部分,所以你應該從正則表達式中刪除它們 放在一起,你可以這樣做:
>>> m = re.search(r'(T)P-(L)INK.+(WA\w+)', re1)
>>> ''.join(m.groups())
'TLWA850RE'
但是,如果要縮寫字符串,則應該匹配字符串並使用正則表達式提取重要部分,然后為結果添加前綴。 如果組中的TP-LINK
部分總是相同的話,則無需捕獲它們。 這也將進一步簡化您的正則表達式。
>>> m = re.search(r'TP-LINK.+(WA\w+)', re1)
>>> "TL" + m.group(1)
'TLWA850RE'
然后是其他案例(Netgear,Cisco等)的類似正則表達式
讓我快點問,為什么你想要這樣的正則表達式。 如果它是一個模式,它出現在您使用的許多字符串上,那些都適用於某個規則,並且該過程的結果總是根據要提供的規則,而正則表達式可能是正確的工具。
例如,像100s這樣的數據:
TP-LINK Wireless Range Extender WA850RE > TLWA850RE
CI-CISCO WLAN Extender CWL12345 > CCWL12345
NG-NETGEAR Wifi Ext NG345 > NGNG345
要實現這一點,您可以使用:
(?m)^(\w)\w+-(\w)[\w\s]+?([A-Z0-9]+)$
(?m) perform each pattern between "^" and "$" on each line
^(\w) catch the first character of the first word starting the line
\w+ match any other following word characters
- match a dash
(\w) match the first character following the dash
[\w\s]+? match any words and whitespace as few(non-greedy) as possible
([A-Z0-9]+)$ match any combination of capitals and numbers till EOL
但是如果你只是有一些固定的規則,那些出現在以完全相同的序列開始的字符串上,並且正則表達式應該是執行靜態替換的復雜方法,那么你的工具可能是錯誤的。 例如:
TP-LINK Wireless Range Extender WA850RE > TLWA850RE
TP-LINK Wireless Range Base WA950RB > TLWA950RB
TP-LINK Wireless Access Point WA87AP > TLWA870AP
在后一種情況下,你應該堅持簡單的文本替換,在第一種情況下,正則表達式可能是合適的。
換句話說,我懷疑你想要的正則表達式是適合你工作的正確工具。
試試這個:這適用於任何物品..
import re
p = re.compile(ur'(\w)\w*-(\w).+(\b\w+)', re.MULTILINE | re.IGNORECASE)
test_str = u"TP-LINK Wireless Range Extender WA850RE\nCI-CISCO WLAN Extender CWL12345\nNG-NETGEAR Wifi Ext NG345"
subst = u"\1\2\3"
result = re.sub(p, subst, test_str)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.