在我的项目中,我有返回字符串的代码,如下所示:
<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)