Python中文
首页
教程
问答
标签
搜索
登录
注册
我需要人帮我弄清楚为什么我的正则表达式似乎不是决定性的
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用正则表达式从输入文本文件中提取和弦。虽然它在大多数情况下对某个文件无效。在</p> <p>这是我的regexp代码:</p> <pre><code>def getChordMatches(line): import re notes = "[ABCDEFG]"; accidentals = "(?:#|##|b|bb)?"; chords = "(?:maj|min|m|sus|aug|dim)?" additions = "[0-9]?" chordFormPattern = notes + accidentals + chords + additions fullPattern = chordFormPattern + "(?:/%s)?\s" % (notes + accidentals) matches = [removeWhitespaces(x) for x in re.findall(fullPattern, line)] positions = [x.start() for x in re.finditer(fullPattern, line)] return matches, positions </code></pre> <p>这是它工作时的结果:</p> ^{pr2}$ <p>这一行来自一个未生成正确结果的文件:</p> <pre><code> line: Am Am/G D7/F# Fmaj7 matches: [u'Fmaj7'] position: [48] </code></pre> <p>我应该从哪里开始挖掘?编码、特殊字符、制表符等?在</p> <p><em>编辑</em></p> <p>以上输出来自:</p> <pre><code>line = unicode(l, encoding='utf-8') matches, positions = getChordMatches(line) print ' line:', line print ' matches:', matches print 'position:', positions </code></pre> <p><em>编辑</em></p> <p>完整的regex模式是:</p> <pre><code>[ABCDEFG](?:#|##|b|bb)?(?:maj|min|m|sus|aug|dim)?[0-9]?(?:/[ABCDEFG](?:#|##|b|bb)?)?\s </code></pre> <p><em>编辑</em></p> <p>想一想失败的河西:</p> <pre><code>hexdump -s 45 -n 99 input.txt 000002d 20 41 6d 20 20 20 20 20 20 20 20 20 20 41 6d 2f 000003d 47 20 c2 a0 20 20 20 20 20 20 44 37 2f 46 23 20 000004d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 000005d 46 6d 61 6a 37 0a 49 20 6c 6f 6f 6b 20 61 74 20 000006d 79 6f 75 20 61 6c 6c 20 73 65 65 20 74 68 65 20 000007d 6c 6f 76 65 20 74 68 65 72 65 20 74 68 61 74 27 000008d 73 20 73 0000090 </code></pre> <p><em>编辑</em></p> <p>如公认答案所述,这是由一个不间断的空格引起的。使用<code>line = unicode(l, encoding='utf-8').replace(u"\u00A0", " ")</code>解决了这个问题。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我想问题是你给出的一行字符与和弦后面的\s不匹配,而regex表达式需要空格字符。无论如何,正则表达式都是错误的,因为它在最后一个和弦之后需要一个空格。在</p> <p>尝试使用\b而不是\s</p> <p>(评论后编辑)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
4 回答
无法使用Django\u mssql\u后端迁移到外部hos
10 回答
无法使用Django&Python3.4连接到MySql
10 回答
无法使用Django+nginx上载媒体文件
2 回答
无法使用Django1.6导入名称模式
10 回答
无法使用Django1.7和mongodb登录管理站点
7 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
9 回答
无法使用Djangockedi验证CBV中的字段
1 回答
无法使用Djangocketditor上载图像(错误400)
9 回答
无法使用Djangocron进行函数调用
3 回答
无法使用Djangofiler djang上载文件
10 回答
无法使用Djangokronos
10 回答
无法使用Djangomssql provid
1 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
2 回答
无法使用Djangomssq迁移Django数据库
7 回答
无法使用Djangonox创建用户
8 回答
无法使用Djangopyodb从Django查询SQL Server
5 回答
无法使用Djangopython3ldap连接到ldap
6 回答
无法使用Djangoredis连接到redis
7 回答
无法使用Django中的FK创建新表
6 回答