简体   繁体   中英

Python regular expression to parse a list into text for a response

When I run the code below I get:

    Thank you for joining, ['cars', 'gas', 'jewelry']but['bus', 'join'] are not keywords.

How can I effectively turn the lists in to just strings to be printed? I suspect I may need a regular expression... this time :)

    import re   

    pattern = re.compile('[a-z]+', re.IGNORECASE)

    text = "join cars jewelry gas bus"
    keywordset = set(('cars', 'jewelry', 'gas', 'food', 'van', 'party', 'shoes'))
    words = pattern.findall(text.lower())
    notkeywords = list(set(words) - keywordset)
    keywords = list(keywordset & set(words))

        if notkeywords == ['join']:
            print "Thank you for joining keywords " + str(keywords) + "!"
        else:
            print "Thank you for joining, " + str(keywords) + "but" + str(notkeywords) + " are not keywords."

To convert list to strings use str.join like this

print "Thank you for joining keywords " + ",".join(keywords) + "!"

This if notkeywords == ['join']: is not a way to compare list elements.

>>> mylist = [1,2]
>>> mylist == 1
False

you should in operator to check for equality.

>>> mylist = [1,2]
>>> 1 in mylist
True

Just use someString.join(list) :

        if notkeywords == ['join']:
            print "Thank you for joining keywords " + ", ".join(keywords) + "!"
        else:
            print "Thank you for joining, " + ", ".join(keywords) + "but" + ", ".join(notkeywords) + " are not keywords."

If I understood your question correctly, you'll want to use the .join() string method to combine the list before printing it.

For example:

', '.join(my_list)

will give you comma separated output. ', ' can be whatever kind of separator you like.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM