[英]how to write regular expression in python ? I want to write R.E. for the following example
[英]How do i write a regular expression for the following pattern in python?
如何在 python 中使用正則表達式查找以下模式? 對於這兩種情況
在“=”符號后尋找str2
str1=str2
str1 = str2
請注意,“=”符號的兩側之間可以有空格或沒有空格
我的就是這樣,但只適用於其中一種情況!
m=re.search('(?<=str\s\=\s)\w+','str = str2')
返回 str2
幫助!
加思
如果您確實只有這么簡單的字符串要解析,則不需要正則表達式。 您可以在=
上進行分區並剝離(甚至 lstrip)結果元組的最后一個元素:
>>> case = 'str = str2'
>>> case.partition('=')[2].lstrip()
'str2'
它會比正則表達式快得多。 只是為了展示我做了一個簡單的測試有多快:
>>> timeit.timeit("'str1 = str2 '.partition('=')[2].strip()")
0.49051564213846177
>>> timeit.timeit("'str1 = str2 '.split('=')[1].strip()")
0.97673281637025866
>>> timeit.timeit('import re')
0.65663786250422618
re.search(r'=\s*(.*)', 'str = str2').group(1)
或者如果你只想要一個詞:
re.search(r'=\s*(\w+)', 'str = str2').group(1)
擴展到特定的初始字符串:
re.search(r'\bstr\s*=\s*(\w+)', 'str=str2').group(1)
\b
= 單詞邊界,所以不會匹配"somestr=foo"
通過所有選項一次 go 會更快,而不是一次搜索單個選項:
option_str = "a=b, c=d, g=h"
options = dict(re.findall(r'(\w+)\s*=\s*(\w+)', option_str))
options['c'] # -> 'd'
如果您的數據是固定的,那么您可以在不使用正則表達式的情況下執行此操作。 只需將其拆分為'='。 例如:
>>> case1 = "str1=str2"
>>> case2 = "str1 = str2"
>>> str2 = case1.split('=')[1].strip()
>>> str2 = case2.split('=')[1].strip()
這個YOURCASE.split('=')[1].strip()
語句適用於任何情況。
只需使用拆分 function
如果您只想處理上述兩種情況,我認為正則表達式是矯枉過正的。 這就是我要做的-
>>> case1 = "str1=str2"
>>> case2 = "str1 = str2"
>>> case2.split()
['str1', '=', 'str2']
>>> ''.join(case2.split())
'str1=str2'
>>> case1[5:]
'str2'
>>> ''.join(case2.split())[5:]
'str2'
>>>
我假設您正在尋找特定的令牌“str1”。 我還假設 str1 可以分配不同的值。 類似於您在配置文件中的內容 => propertyName = value。
這只是我的看法。
我知道其他方式是可能的。 SilentGhost 提供了一個不錯的(更好的!)替代方案。
希望這可以幫助。
擴展@batbrat 的答案和其他建議,您可以使用re.split()
來分隔輸入字符串。 該模式可以使用\s
(空格)或顯式空格。
>>> import re
>>> c1="str1=str2"
>>> c2="str1 = str2"
>>> re.split(' ?= ?',c1)
['str1', 'str2']
>>> re.split(' ?= ?',c2)
['str1', 'str2']
>>> re.split(r'\s?=\s?',c1)
['str1', 'str2']
>>> re.split(r'\s?=\s?',c2)
['str1', 'str2']
>>>
兩種情況:
(情況1)如果'='之前有一個空格,那么'='之后也必須有一個空格
m=re.search(r'(?<=\S)(?:\s=\s|=)(\w+)','str = str2') print m.group(1)
(情況 2) 否則,
m=re.search(r'(?<=\S)\s?=\s?(\w+)','str = str2') print m.group(1)
在第一種情況下,您也可以對第二個空格使用 "(?P=… .
相關想法:我發現使用圖形正則表達式工具有助於找出正確的模式: http://kodos.sf.net 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.