Python - 从字符串中提取文本
什么是从字符串中提取文本的最有效方法?是否有一些可用的函数或正则表达式,或其他方式?Python - 从字符串中提取文本
例如,我的字符串在下面,我想单独提取ID和 作为ScreenNames。
[User(ID=1234567890, ScreenName=RandomNameHere), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=4459284, ScreenName=YetAnotherName)]
谢谢!
编辑:这些是我想要拉的文本字符串。我希望他们在列表中。
Target_IDs = 1234567890,233323490,4459284个 Target_ScreenNames = RandomNameHere,AnotherRandomName,YetAnotherName
import re
str = '[User(ID=1234567890, ScreenName=RandomNameHere), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=4459284, ScreenName=YetAnotherName)]'
print 'Target IDs = ' + ','.join(re.findall(r'ID=(\d+)', str))
print 'Target ScreenNames = ' + ','.join(re.findall(r' ScreenName=(\w+)', str))
输出: 目标ID = 1234567890,233323490,4459284 目标的昵称= RandomNameHere,AnotherRandomName,YetAnotherName
哇,完美的工作!谢谢!现在要了解代码实际上在做什么:) – New
我会使用的正则表达式是:
(?:ID=|ScreenName=)+(\d+|[\w\d]+)
但是,这里假定ID只是数字(\d
),用户名只能是字母或数字([\w\d]
)。
此正则表达式(与re.findall
相结合)都将返回一个通过迭代和分类以某种方式像这样的比赛名单:
import re
s = "[User(ID=1234567890, ScreenName=RandomNameHere), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=4459284, ScreenName=YetAnotherName)]"
pattern = re.compile(r'(?:ID=|ScreenName=)+(\d+|[\w\d]+)');
ids = []
names = []
for p in re.findall(pattern, s):
if p.isnumeric():
ids.append(p)
else:
names.append(p)
print(ids, names)
感谢您的正则表达式。用户名可以有字母和数字。 – New
更新为允许这种可能性。'[\ d \ w]'匹配一个字母或数字,'+'允许多个匹配。 – Darkstarone
这要看情况。假设您的所有文字都以
的形式出现TagName = TagValue1, TagValue2, ...
您只需要两次调用就可以进行拆分。
tag, value_string = string.split('=')
values = value_string.split(',')
移除多余的空间(可能是一对夫妇的rstrip()
/lstrip()
电话就足够了),和你做。或者你可以采取正则表达式。他们稍强一些,但在这种情况下,我认为这是个人品味的问题。
如果你想要非终结者,终端等等更复杂的语法,你需要lex/yacc,这将需要一些解析器背景。一个相当有趣的事情,但不是你想用来存储程序选项等。
我会研究这一点。谢谢。 – New
您想在文章底部解析列表的文字是? – Jakub
使用正则表达式,首先提取每个User(ID = {matching expression},ScreenName = {matching experssion})',然后进行另一次提取以获得所需内容。 –
@Jakub,我修改了我的帖子。我想解析的文本现在在帖子的底部。我特意要解析出1234567890,233323490,4459284和RandomNameHere,AnotherRandomName,YetAnotherName – New