- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这样一个字符串:
我想要这个输出:
同样,愚蠢的单引号应该转换成它们的大括号。 Read about the typographic rules here if you are interested.
我猜这个问题之前已经解决了,但我找不到库或脚本来完成它。 SmartyPants (Perl) 是执行此操作的所有库之母,并且有一个 python port .但它的输出是 HTML 实体: “但是那位先生,”
我只想要一个带有弯引号的普通字符串。有什么想法吗?
更新:
我按照 Padraig Cunningham 的建议解决了它:
HTMLParser().unescape
将 HTML 实体转换回 Unicode如果您的输入文本包含您不希望转换的 HTML 实体,这种方法可能会有问题,但在我的情况下没问题。
更新结束
输入是否可信?
目前只能信任输入。该字符串可以包含一个非闭合双引号:"But be that gentleman, looking at Dary
。它还可以包含一个非闭合单引号:'But be that gentleman, looking at Dary
。最后,它可以包含一个单引号,表示撇号:Don't go there.
我已经实现了一个试图正确关闭这些丢失的引号的算法,所以这不是问题的一部分。为了完整起见,这里是关闭丢失引号的代码:
quotationMarkDictionary = [{
'start': '"',
'end': '"',
},{
'start': '“',
'end': '”',
},{
'start': '\'',
'end': '\'',
},{
'start': '‘',
'end': '’'
},{
'start': '(',
'end': ')'
},{
'start': '{',
'end': '}'
},{
'start': '[',
'end': ']'
}]
'''If assumedSentence has quotation marks (single, double, …) and the
number of opening quotation marks is larger than the number of closing
quotation marks, append a closing quotation mark at the end of the
sentence. Likewise, add opening quotation marks to the beginning of the
sentence if there are more closing marks than opening marks.'''
for quotationMark in quotationMarkDictionary:
numberOpenings = assumedSentence['sentence'].count(quotationMark['start'])
numberClosings = assumedSentence['sentence'].count(quotationMark['end'])
# Are the opening and closing marks the same? ('Wrong' marks.) Then just make sure there is an even number of them
if quotationMark['start'] is quotationMark['end'] and numberOpenings % 2 is not 0:
# If sentence starts with this quotation mark, put the new one at the end
if assumedSentence['sentence'].startswith(quotationMark['start']):
assumedSentence['sentence'] += quotationMark['end']
else:
assumedSentence['sentence'] = quotationMark['end'] + assumedSentence['sentence']
elif numberOpenings > numberClosings:
assumedSentence['sentence'] += quotationMark['end']
elif numberOpenings < numberClosings:
assumedSentence['sentence'] = quotationMark['start'] + assumedSentence['sentence']
最佳答案
您可以使用 HTMLParser
对从 smartypants 返回的 html 实体进行转义:
In [32]: from HTMLParser import HTMLParser
In [33]: s = "“But that gentleman,”"
In [34]: print HTMLParser().unescape(s)
“But that gentleman,”
In [35]: HTMLParser().unescape(s)
Out[35]: u'\u201cBut that gentleman,\u201d'
为避免编码错误,您应该在打开文件时使用 io.open
并指定 encoding="the_encoding"
或将字符串解码为 unicode:
In [11]: s
Out[11]: '“But that gentleman,”\xe2'
In [12]: print HTMLParser().unescape(s.decode("latin-1"))
“But that gentleman,”â
关于Python:将字符串中的 "dumb quotation marks"替换为 “curly ones”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234488/
我正在使用智能/转储组件构建我的 Redux (NgRx) 应用程序,但我正在努力决定这些dumb组件应该有多“哑”...... 例如,我有一个智能组件(posts),它有一个dumb组件(post-
有什么方法可以像Vim中的ctrl + p一样在Eclipse中获得“哑”字补全吗? 例如,我经常写一个函数调用: x = getMeAnXPlease(); 然后输入定义: function get
人们可能会认为将 3 个字符的缩写转换为数字表示形式是一项简单的任务。 JavaScript 说“不!”。 $(selector).each(function() { // convert m
如果您需要生成从 1 到 N 的素数,“愚蠢”的方法是遍历从 2 到 N 的所有数字,并检查这些数字是否可以被目前找到的任何素数整除,即小于相关数字的平方根。 在我看来,Eratosthenes 筛法
我创建了一个标准结构的“智能变体”——系统提供了struct canmsg,这种类型的数据是从can设备中读取的,我经常处理这样的帧。 现在,为了更容易处理它们,我创建了一个子类:class TCan
我希望在 golang 中实现远程客户端它通过 nc 连接到 Linux 并启动 bash。所以我需要告诉 bash 我可以从它发送给我的 stdout 中解析哪些功能,以及我将如何将键码和其他内容发
我有一个包含 300,000 个单词及其出现频率的列表的文本文件。每行的格式为 Word:FequencyOfOccurence。我希望可以从 C# 代码中访问此信息。我无法对列表进行硬编码,因为它太
我必须解决 gettext 识别 ES6 模板字符串的限制,并且我考虑将模板字符串的“非内插值”作为编译步骤,以便只有代码中的“正常”字符串。 基本上我想实现的是改变这个 const adjectiv
看看这个简单的示例,其中 prop toggleData 将是映射到容器 props 的 redux thunk 操作。 这是将这样的函数传递给子“哑”组件的推荐方法吗?我在网上读到一篇文章说,从性能
好吧,我不是在谈论业务逻辑决策,而是 UI 决策。 例如,我正在渲染一个表格,其中一列显示日期时间?需要格式化的属性。因为该值可以为空,所以我需要在格式化之前检查它是否不为空。 如果我想迂腐一些,我会
有谁知道在 Google App Engine 中返回包装的 Model 实例的巧妙方法,该实例仅公开一些原始属性,并且不允许将实例保存回数据存储区? 我不是在寻找实际执行这些规则的方法,显然仍然可以
我已经设法了解了 C++ 的一些功能(for_each、映射函数、使用迭代器...),但是用于接收通用容器和迭代器的模板和函数参数列表的构造仍然让我难以理解。我有一个实际的例子,希望有人能为我说明:
当然,我想不出有什么理由让我想要覆盖一元&运算符,但在https://stackoverflow.com/a/4542813/368896中张贴者指出,关于某些类 X: ...unless X doe
文章中Better web typography in a few simple steps , 它说 Talking about apostrophes, the correct sign for
我希望这个问题不要被标记为主要是基于意见的,而是有一个客观的答案。 我已阅读 Introducing dumb-init, an init system for Docker containers ,
愚蠢的引用是那些直接出现的引用。智能引号 curl 并且它们 curl 在正确的方向。我认为规则如下: 如果引用位于单词开头,则会向右 curl 。 如果引号位于单词开头,后面跟着另一个引号或分组符号
所以我正在研究一种“中级”级别的 react 项目。我了解基础知识,但不知道某些事情的最佳实践。 让我们假设我正在将一个函数传递给一个“哑”组件,在这个dumb组件中有一个按钮,它是对父函数 Edit
我正在尝试从工作本地服务器导出一个相当复杂的 mySQL 数据库,上传到在线服务器,以便协作者只读其中的数据。 数据库有多个外键,每个表都有一个主键。然而,由于不会将任何数据添加到这个愚蠢的“影子”副
struct A { A(int a); }; struct B { B(); void b(std::shared_ptr a); }; int main() { A
我问的原因是我们想使用 MySQL 当前不支持的特定 CHECK 约束。如果没有这种类型的约束,使用外键和参照完整性的全部原因似乎会随着应用程序代码承担更多数据库的责任而减少。 如果我们要创建一个“哑
我是一名优秀的程序员,十分优秀!