在电子邮件主题行中的单词“ for”和左括号“(”之间提取单词。电子邮件主题行是输入

时间:2019-05-09 19:17:17

标签: python regex zapier

客户名称在单词“ for”之后,并在括号(“”之前),该提案名称开始于提案编号。我需要提取客户名称,以便在以后的步骤中查找交易。最简单的方法是使用Zapier提取模式还是在Python中使用Zapier代码?

我已经尝试过了,但是没有用。看起来很有希望。

input_data

client =提醒:Leruths已向您发送了一个有关公司名称的提案(#642931)

import regex
rgx = regex.compile(r'(?si)(?|{0}(.*?){1}|{1}(.*?)
{0})'.format('for', '('))
s1 = 'client'
for s in [s1]:
m = rgx.findall
for x in m:
print x.strip()

我也尝试过,但没有用。

start = mystring.find( 'for' )
end = mystring.find( '(' )
if start != -1 and end != -1:
result = mystring[start+1:end]

我正在寻找示例中要返回的商户名称。

1 个答案:

答案 0 :(得分:0)

最快的方式:

start = client.find('for')
end = client.find('(')
result = client[start+4:end-1]
print(result)

使用正则表达式:

result = re.search(r' for (.*) [(]', client)
print(result.group(1))

可能有一种更清洁的方法,但这是不使用正则表达式的另一种解决方案

client = "Reminder: Leruths has sent you a proposal for Business Name (#642931)"

cs = client.split(" ")
name = ""
append = False
for word in cs:
    if "for" == word:
        append = True
    elif word.startswith("("):
        append = False
    if append is True and word != "for":
        name += (word + " ")
name = name.strip()
print(name)

另一种方法:

client = "Reminder: Leruths has sent you a proposal for Business Name (#642931)"

cs = client.split(" ")
name = ""
forindex = cs.index("for")

for i in range(forindex+1, len(cs)):
    if cs[i].startswith("("):
        break
    name += cs[i] + " "
name = name.strip()

print(name)

运行以下代码将给出:

Regex method took 2.3912417888641357 seconds
Search word by word method took 4.78193998336792 seconds
Search with list index method took 3.1756017208099365 seconds
String indexing method took 0.8496286869049072 seconds

代码以最快的速度获得超过一百万次尝试的名称:

import re
import time

client = "Reminder: Leruths has sent you a proposal for Business Name (#642931)"

def withRegex(client):
    result = re.search(r' for (.*) [(]', client)
    return(result.group(1))

def searchWordbyWord(client):
    cs = client.split(" ")
    name = ""
    append = False
    for word in cs:
        if "for" == word:
            append = True
        elif word.startswith("("):
            append = False
        if append is True and word != "for":
            name += (word + " ")
    name = name.strip()
    return name

def searchWithListIndex(client):
    cs = client.split(" ")
    name = ""
    forindex = cs.index("for")

    for i in range(forindex+1, len(cs)):
        if cs[i].startswith("("):
            break
        name += cs[i] + " "
    name = name.strip()

    return name

def stringIndexing(client):
    start = client.find('for')
    end = client.find('(')
    result = client[start+4:end-1]
    return result

wr = time.time()
for x in range(1,1000000):
    withRegex(client)
wr = time.time() - wr
print("Regex method took " + str(wr) + " seconds")

sw = time.time()
for x in range(1,1000000):
    searchWordbyWord(client)
sw = time.time() - sw
print("Search word by word method took " + str(sw) + " seconds")

wl = time.time()
for x in range(1,1000000):
    searchWithListIndex(client)
wl = time.time() - wl
print("Search with list index method took " + str(wl) + " seconds")

si = time.time()
for x in range(1,1000000):
    stringIndexing(client)
si = time.time() - si
print("String indexing method took " + str(si) + " seconds")