Python提取复杂字符串中的单个单词



在我的项目中,我有返回字符串的代码,如下所示:

<Thread(Thread-11, started daemon 123145310715904)>

<Thread(Thread-12, started daemon 177145310715904)>

<Thread(Thread-12, started daemon 129145310715904)>

我只想提取"Thread-11"或"Thread-12"(在实践中从第一部分(到第一部分,char(,但我不知道如何在python中实现这一点。我试过这样的拆分:

tsplit=mystring.split("读取-"(

但我可以按惯例退货。

有什么帮助吗?

提前感谢Luca

您可以为此使用正则表达式。

例如,你可以做的是:

import re
pattern = "(Thread-d+)"
text = "<Thread(Thread-12, started daemon 129145310715904)>"
match= re.search(pattern, text)
print(match.group(0))

输出:

Thread-12

这样做的目的是指定类似于"在text字符串中搜索与模式Thread-<one or multiple numbers>匹配的字符串"的内容。

如果您想使用split,一种方法可以是:

a = '<Thread(Thread-11, started daemon 123145310715904)>'
p = a.split('(')[1].split(',')[0]

输出:

Thread-11
inp = '<Thread(Thread-11, started daemon 123145310715904)>'
m = re.search('^.*((.*),.*$', inp)
if m:
print (m.group(1))

使用Regex正向查找:

In [144]: s = '<Thread(Thread-11, started daemon 123145310715904)>'
In [145]: re.search(r'(?<=()[^,]+', s).group()
Out[145]: 'Thread-11'
  • (?<=()是零宽度正后方模式,确保匹配之前有(

  • [^,]+匹配一个或多个不是,的字符

分组相同(无后备(:

In [146]: re.search(r'(([^,]+)', s).group(1)
Out[146]: 'Thread-11'

这里我们需要从匹配对象中获取第一个捕获的组,即CCD_。

@santi有两种方法可以提取您想要的内容。

  • 使用简单拆分
  • 使用regex(python中的re模块(

使用str.split()的示例1

string = '<Thread(Thread-11, started daemon 123145310715904)>'
out = string.split(',')[0].split('Thread(')[1]
print(out)

使用re的示例2

import re
string = '<Thread(Thread-11, started daemon 123145310715904)>'
out = re.search(r'(Thread-d+)', string)
print(out.group())

如果使用线程,则线程名称也可以使用.name.getName()打印/返回

示例

>>> from threading import Thread
>>> def somefunc():
print('hello')
>>> thread = Thread(target=somefunc)
>>> thread.daemon= True
>>> thread.start()
>>> thread.name, thread.getName() # gives thread names directly

您可以使用一个简单的regex-

import re
word = re.search(u"[(][a-zA-Z]{6}[-]d+[,]", "<Thread(Thread-11, started daemon 123145310715904)>").group(0).replace("(", "").replace(",", "")
# OP 'Thread-11'

这种模式的解释-

[(][a-zA-Z]{6}[-]d+[,]
[(] - match a parentheses 
[a-zA-Z]{6} - match strings, 6 occurrences 
[-] - match a hyphen
d+[,] - match digits and then match a hyphen 

如果您提前知道元素在字符串中的位置,则可以使用切片:

>>> result = "<Thread(Thread-12, started daemon 129145310715904)>"
>>> result = result[8:17]
>>> result
'Thread-12'

这种解决方案比其他解决方案更严格,但根据需要可以更简单地应用。

其中一种方法是

str1 = '<Thread(Thread-11, started daemon 123145310715904)>'
import re
m = re.search('Thread-dd', str1)
m.group(0)

最新更新