我知道有反斜杠的帖子,但他们的建议对我不起作用。 我试图捕捉SUBJECT之后的所有内容:以及公司(见下文)。
我正在使用此代码。注意双反斜杠\。但我的正则表达式的输出停止了 在CHI儿童,因为'CHI儿童'的反弹。我该怎么做才能处理这个不想被捕获的反斜杠?
indextext = re.findall(r'SUBJECT:\s+[A-Z\s\(\w+\%\)\;\&\:\-\,\/\\]+', udoc2)[0]
indextext = re.sub(r'\r\n','\n', indextext)
更新: 我无法预先指定'COMPANY:'的原因是因为每个文档都有不同的单词。有时公司不存在。我将被迫硬编码几十个例外。
udoc = [主题:创业者(93%);新闻稿(91%);营养(90%);学生\ r \ n&安培;学生生活(90%);预防&健康(90%);练习&健身(90%); \ r \ nVENTURE CAPITAL(90%);非营利组织(90%);计算机软件(85%); \ r \ nCHILDREN(78%);公共私营伙伴关系(78%);慈善机构(78%);赞助\ r \ N(78%);基金会(78%);慈善事业(78%);教育系统与机构\ r \ N(78%);联盟&合作伙伴关系(77%);娱乐与娱乐艺术(77%);产品\ n \ n创新(77%);工作场所计划(77%);运动与娱乐活动(74%); \ r \ nSPORTS FANS(74%);美国足球锦标赛(74%);许可协议\ r \ n(74%);美国足球(74%);体育(74%);农业部门(73%); \ r \ nOROROR FORCE(70%);执行官(70%);商业分析(67%);商业软件\ r \ n(62%)NY-GENYOUth-SAP; CHI儿童相关新闻; LIC许可和营销\ r \ nAgreements \ r \ n \ r \ nCOMCOM:]
当前输出: 主题:企业家(93%);新闻稿(91%);营养(90%);学生们 &安培;学生生活(90%);预防&健康(90%);练习&健身(90%); 风险投资(90%);非营利组织(90%);计算机软件(85%); 儿童(78%);公共私营伙伴关系(78%);慈善机构(78%);赞助 (78%);基金会(78%);慈善事业(78%);教育系统与机构 (78%);联盟&合作伙伴关系(77%);娱乐与娱乐艺术(77%);产品 创新(77%);工作场所计划(77%);运动与娱乐活动(74%); 体育迷(74%);美国足球锦标赛(74%);许可协议 (74%);美国足球(74%);体育(74%);农业部门(73%); 劳动力(70%);执行官(70%);商业分析(67%);商业软件 (62%)NY-GENYOUth-SAP; CHI儿童
答案 0 :(得分:1)
你不是第一个在这里砰的一声
http://docs.python.org/2/howto/regex.html#the-backslash-plague
你需要4个反斜杠来逃避目标字符串中的反斜杠。
也就是说,我喜欢使用交互式工具来完善正则表达式,例如正则表达式教练。 http://www.weitz.de/regex-coach/
如果你不想做愚蠢的4反斜杠,请从你的外部工具复制并使用re.compile(re.escape(string))
答案 1 :(得分:1)
你的问题有点模糊,所以我不完全确定你在寻找什么
udoc = "SUBJECT: ENTREPRENEURSHIP (93%); PRESS RELEASES (91%); NUTRITION (90%); STUDENTS\r\n& STUDENT LIFE (90%); PREVENTION & WELLNESS (90%); EXERCISE & FITNESS (90%);\r\nVENTURE CAPITAL (90%); NONPROFIT ORGANIZATIONS (90%); COMPUTER SOFTWARE (85%);\r\nCHILDREN (78%); PUBLIC PRIVATE PARTNERSHIPS (78%); CHARITIES (78%); SPONSORSHIP\r\n(78%); FOUNDATIONS (78%); PHILANTHROPY (78%); EDUCATION SYSTEMS & INSTITUTIONS\r\n(78%); ALLIANCES & PARTNERSHIPS (77%); ENTERTAINMENT & ARTS (77%); PRODUCT\r\nINNOVATION (77%); WORKPLACE PROGRAMS (77%); SPORTS & RECREATION EVENTS (74%);\r\nSPORTS FANS (74%); AMERICAN FOOTBALL TOURNAMENTS (74%); LICENSING AGREEMENTS\r\n(74%); AMERICAN FOOTBALL (74%); SPORTS (74%); AGRICULTURE DEPARTMENTS (73%);\r\nLABOR FORCE (70%); EXECUTIVES (70%); BUSINESS ANALYTICS (67%); BUSINESS SOFTWARE\r\n(62%) NY-GENYOUth-SAP; CHI Children\'s Related News; LIC Licensing and Marketing\r\nAgreements\r\n\r\nCOMPANY:"
注意从列表到字符串的更改
在我看来,你正在寻找冒号之间的一切
s = udoc.split(':')[1]
然后你可能需要搞乱各个项目
mylist = [item for item in s.split(';')]
稍微清理它们
newlist = []
for item in mylist:
newlist.append(' '.join(item.split()))
你可以通过一些简单的操作摆脱最后一个字(在这种情况下是公司)
newlist[-1] = ' '.join(newlist[-1].split()[:-1])
最后,如果您希望将结果作为字符串,只需使用某个分隔符加入新列表
答案 2 :(得分:1)
我不喜欢你的做法,所以我把它扔出窗外。你要做的最后一件事是使用正则表达式匹配巨大的数字,而你等待的只是一些事情。这与正则表达式应该做的完全相反:所以你也不要这样做。
我玩了很长时间的代码,试图找出你想要做的事情和原因。在我看来,你试图以某种方式索引这些值,比如{"ENTREPRENEURSHIP":93,"PRESS RELEASES":91,...}
,这就是我所建立的。也许这不是你的最终目标,在这种情况下,jeebus兄弟在这里给我们一些反馈....
text = """udoc = [SUBJECT: ENTREPRENEURSHIP (93%); PRESS RELEASES (91%); NUTRITION (90%); STUDENTS\r\n& STUDENT LIFE (90%); PREVENTION & WELLNESS (90%); EXERCISE & FITNESS (90%);\r\nVENTURE CAPITAL (90%); NONPROFIT ORGANIZATIONS (90%); COMPUTER SOFTWARE (85%);\r\nCHILDREN (78%); PUBLIC PRIVATE PARTNERSHIPS (78%); CHARITIES (78%); SPONSORSHIP\r\n(78%); FOUNDATIONS (78%); PHILANTHROPY (78%); EDUCATION SYSTEMS & INSTITUTIONS\r\n(78%); ALLIANCES & PARTNERSHIPS (77%); ENTERTAINMENT & ARTS (77%); PRODUCT\r\nINNOVATION (77%); WORKPLACE PROGRAMS (77%); SPORTS & RECREATION EVENTS (74%);\r\nSPORTS FANS (74%); AMERICAN FOOTBALL TOURNAMENTS (74%); LICENSING AGREEMENTS\r\n(74%); AMERICAN FOOTBALL (74%); SPORTS (74%); AGRICULTURE DEPARTMENTS (73%);\r\nLABOR FORCE (70%); EXECUTIVES (70%); BUSINESS ANALYTICS (67%); BUSINESS SOFTWARE\r\n(62%) NY-GENYOUth-SAP; CHI Children\'s Related News; LIC Licensing and Marketing\r\nAgreements\r\n\r\nCOMPANY:]"""
# sheesh that's a big string literal! Let's take a few lines to breathe.
# after all, we have to give the interpreter enough
# time
# to
# process all that
# data we just fed it
#
# ...right?
values = {' '.join(item[:-1]):item[-1].strip("(%)") for
full_list in text.split(":")[1:-1] for
element in full_list.split(";")[:-1] for
item in [element.strip().split()]}
for key,value in values.items():
print("{:35}: {}".format(key,value))
# AMERICAN FOOTBALL TOURNAMENTS : 74
# LABOR FORCE : 70
# BUSINESS ANALYTICS : 67
# COMPUTER SOFTWARE : 85
# CHARITIES : 78
# AMERICAN FOOTBALL : 74
# BUSINESS SOFTWARE (62%) : NY-GENYOUth-SAP
# FOUNDATIONS : 78
# CHILDREN : 78
# SPORTS : 74
# SPONSORSHIP : 78
# EDUCATION SYSTEMS & INSTITUTIONS : 78
# PUBLIC PRIVATE PARTNERSHIPS : 78
# SPORTS & RECREATION EVENTS : 74
# NUTRITION : 90
# ALLIANCES & PARTNERSHIPS : 77
# ENTERTAINMENT & ARTS : 77
# PRESS RELEASES : 91
# WORKPLACE PROGRAMS : 77
# VENTURE CAPITAL : 90
# CHI Children's Related : News
# STUDENTS & STUDENT LIFE : 90
# AGRICULTURE DEPARTMENTS : 73
# EXERCISE & FITNESS : 90
# ENTREPRENEURSHIP : 93
# NONPROFIT ORGANIZATIONS : 90
# PRODUCT INNOVATION : 77
# SPORTS FANS : 74
# PHILANTHROPY : 78
# LICENSING AGREEMENTS : 74
# PREVENTION & WELLNESS : 90
# EXECUTIVES : 70
现在我知道你在说什么,“adsmith,”你开始说,“但看看”CHI儿童相关“和”商业软件(62%)“中的价值观,这显然是错误的!
我无法帮助您的输入格式不正确,没有人可以。 CHI Children's Related
的值为News
,这不是你的错,也不是我的错。他们忽略了在:
和BUSINESS SOFTWARE
之间加(62%)
,我们也不承担责任。
第二个想法,我们不要去re
模块。 “这是一个愚蠢的地方。
答案 3 :(得分:0)
为什么不:
import re
re.search(r'SEARCH:(.+)COMPANY:', udoc2)
答案 4 :(得分:0)
您不必为此使用正则表达式。在这种情况下,似乎有一个更容易的解决方案。
为什么不获取“COMPANY:]”的索引,然后获取所有内容?
答案 5 :(得分:0)