如何使用python捕获特定的字符排列或单词形成一行

时间:2015-03-19 19:36:40

标签: python python-2.7

我需要阅读以下示例行并从该行中获取特定单词。

示例行

#apple (orange3ball/345-35:;bat9cap/253-43) school=(book,pen,bottle)

我想说我想抓住“橘子球”这个词。 (介于('('和' /')和' bat9cap'以及'瓶'。什么是最好的方法它。

我尝试使用split()函数,但我无法正常完成。

如果难以做到,我可以搜索一行中特定的字符排列。

作为一个例子,我可以找到' bat9cap'从上面一行的字符排列。

2 个答案:

答案 0 :(得分:1)

这是交互式shell的工作!创建一个包含相关行的变量并进行实验。在这里,我为你做了一个向你展示一个有点复杂的方式来抓住" (和/.

之间的单词)
>>> line = "#apple (orange3ball/345-35:;bat9cap/253-43) school=(book,pen,bottle)"
>>> line.split()
['#apple', '(orange3ball/345-35:;bat9cap/253-43)', 'school=(book,pen,bottle)']
>>> line.split()[1]
'(orange3ball/345-35:;bat9cap/253-43)'
>>> line.split()[1].split("/")
['(orange3ball', '345-35:;bat9cap', '253-43)']
>>> line.split()[1].split("/")[0]
'(orange3ball'
>>> line.split()[1].split("/")[0].strip("(")
'orange3ball'

请注意,我只是按下了uparrow来获取我上次使用的代码并添加了一些内容。最后一行是相当难以理解的,所以在找到有效的东西之后你可能想把它分成几行并使用一些名称很好的变量来存储中间结果。

理想的做法取决于你可以依赖的线路的哪些方面总是像它们在这里一样。 (例如,如果#apple部分是可选的,那么它可能根本不存在。)您可能需要使用负索引(例如mylist [-1])将不同的字符或索引拆分到列表末尾的结果列表中得到最后一项)。

答案 1 :(得分:1)

使用in来测试会员资格:

>>> s='#apple (orange3ball/345-35:;bat9cap/253-43) school=(book,pen,bottle)'
>>> 'orange3ball' in s
True
>>> 'orange4ball' in s
False
>>> 'bat9cap' in s
True
>>> 'bat9ball' in s
False

您还可以使用正则表达式来区分单词边界:

>>> import re
>>> re.findall(r'(?:\W*(\w+))', s)
['apple', 'orange3ball', '345', '35', 'bat9cap', '253', '43', 'school', 'book', 'pen', 'bottle']

第二种方法的优点是只有整个匹配在结果列表中匹配:

>>> 'or' in s
True
>>> 'or' in re.findall(r'(?:\W*(\w+))', s)
False

或者只使用一个正则表达式来测试整个单词:

>>> re.search(r'\borange3ball\b', s)
<_sre.SRE_Match object; span=(8, 19), match='orange3ball'>
>>> re.search(r'\borange\b', s)
>>> 

(匹配对象的返回是正匹配...)