如何在 python 的 search/find 字符串中添加 space?
How to add space in python's search/find string?
我已经 运行 成为马拉地语维基百科上的 pywikibot 差不多一个月了。该机器人的唯一任务是查找和替换。您可以在以下位置找到 pywikibot 的全部详细信息:pywikibot. You can find the details of that particular find and replace operation at replace.py and fixes.py and even further examples of fixes here.
以下是我的部分源代码。当 运行 马拉地语维基百科上的机器人时,由于马拉地语的脚本,我遇到了困难。所有的替代品都很好,但一个不是。例如,我将使用英文单词而不是马拉地语。
以下代码的第一部分(“修复”)搜索“{{PAGENAME}}”,并将其替换为“{{subst:PAGENAME}}”。 msg参数是编辑摘要。
代码“man”的第二次修复,找到“man”并将其替换为“gent”。但问题是,它也在把“human”换成“hugent”,把“craftsmanship”换成“craftsgentship”等等。
fixes = {
'name': {
'regex': True,
'nocase': True,
'msg': {'mr': '{{PAGENAME}} → पानाचे मूळ नाव (base name of page)'},
'replacements': [
( r'{{ *PAGENAME *}}', '{{subst:PAGENAME}}' ),
],
},
'man': {
'regex': True,
'msg': {'mr': 'man → gent'},
'replacements': [
('man', 'gent'),
],
},
}
所以我尝试将查找和替换参数从('man', 'gent')
更新为('man ', 'gent ')
(最后是space),然后再更新为(' man ', ' gent ')
(space 在两端)。但是这两个变化都没有改变任何词,甚至没有改变原来的(唯一的)“man”。
那么如何将“他是一个好人 - 一个真正的人道主义者”的实例更改为“他是一个好绅士 - 一个真正的人道主义者”而不使其成为巨大的?
您想要 'man' 出现,但只出现一次 - 换句话说,只有当它前面或后面没有其他字母或符号作为单词的一部分时。
我不知道马拉地语是否包含像“-”这样可能是单词一部分的符号,例如 'He was a real man-child',在这种情况下,您可能想要也可能不想替换它。
在英语中,由于您使用的是正则表达式,因此您可以这样做:
'man': {
'regex': True,
'msg': {'mr': 'man → gent'},
'replacements': [
('(?<=[^\w]|^)man(?=[^\w]|$)', 'gent'),
],
}
正则表达式'(?<=[^\w]|^)man(?=[^\w]|$)'
表示:
- 字面意思 'man'
- 前面有任何不是单词字符的字符
[^\w]
,或者行的开头 ^
- 后跟不是单词字符的任何字符
[^\w]
,或行尾 $
请注意,这不包括 Man
,除非您的正则表达式引擎已设置为 case-insensitive。
如果您的正则表达式引擎不认为构成马拉地语单词的字符是 \w
的一部分,您可以将其替换为构成该语言的所有字符的字符串(如果可以的话) (不像中文这样的语标语言)。
请注意,在某些环境中测试正则表达式时,需要 |^
和 |$
,而在其他环境中可能会导致问题。
在纯 Python 中,这有效:
import re
text = 'He was a good man, a true humanitarian.'
print(re.sub('(?<=[^\w])man(?=[^\w])', 'gent', text))
text = 'तो एक चांगला माणूस होता माणूसला'
print(re.sub('(?<=[^\w])माणूस(?=[^\w])', 'व्यक्ती', text))
输出:
He was a good gent, a true humanitarian.
तो एक चांगला व्यक्ती होता माणूसला
这样 (?<=[^\w])man(?=[^\w])
可能就是您所需要的。 (我希望这里的马拉地语不是一不小心就粗鲁了 - 我怪 Google 翻译)
你为什么不试试这个 - 把(男人)变成绅士。
然后 运行 另一个代码并将所有 (hugents) 替换为 (human) 一个简单的修复。
我已经 运行 成为马拉地语维基百科上的 pywikibot 差不多一个月了。该机器人的唯一任务是查找和替换。您可以在以下位置找到 pywikibot 的全部详细信息:pywikibot. You can find the details of that particular find and replace operation at replace.py and fixes.py and even further examples of fixes here.
以下是我的部分源代码。当 运行 马拉地语维基百科上的机器人时,由于马拉地语的脚本,我遇到了困难。所有的替代品都很好,但一个不是。例如,我将使用英文单词而不是马拉地语。
以下代码的第一部分(“修复”)搜索“{{PAGENAME}}”,并将其替换为“{{subst:PAGENAME}}”。 msg参数是编辑摘要。
代码“man”的第二次修复,找到“man”并将其替换为“gent”。但问题是,它也在把“human”换成“hugent”,把“craftsmanship”换成“craftsgentship”等等。
fixes = {
'name': {
'regex': True,
'nocase': True,
'msg': {'mr': '{{PAGENAME}} → पानाचे मूळ नाव (base name of page)'},
'replacements': [
( r'{{ *PAGENAME *}}', '{{subst:PAGENAME}}' ),
],
},
'man': {
'regex': True,
'msg': {'mr': 'man → gent'},
'replacements': [
('man', 'gent'),
],
},
}
所以我尝试将查找和替换参数从('man', 'gent')
更新为('man ', 'gent ')
(最后是space),然后再更新为(' man ', ' gent ')
(space 在两端)。但是这两个变化都没有改变任何词,甚至没有改变原来的(唯一的)“man”。
那么如何将“他是一个好人 - 一个真正的人道主义者”的实例更改为“他是一个好绅士 - 一个真正的人道主义者”而不使其成为巨大的?
您想要 'man' 出现,但只出现一次 - 换句话说,只有当它前面或后面没有其他字母或符号作为单词的一部分时。
我不知道马拉地语是否包含像“-”这样可能是单词一部分的符号,例如 'He was a real man-child',在这种情况下,您可能想要也可能不想替换它。
在英语中,由于您使用的是正则表达式,因此您可以这样做:
'man': {
'regex': True,
'msg': {'mr': 'man → gent'},
'replacements': [
('(?<=[^\w]|^)man(?=[^\w]|$)', 'gent'),
],
}
正则表达式'(?<=[^\w]|^)man(?=[^\w]|$)'
表示:
- 字面意思 'man'
- 前面有任何不是单词字符的字符
[^\w]
,或者行的开头^
- 后跟不是单词字符的任何字符
[^\w]
,或行尾$
请注意,这不包括 Man
,除非您的正则表达式引擎已设置为 case-insensitive。
如果您的正则表达式引擎不认为构成马拉地语单词的字符是 \w
的一部分,您可以将其替换为构成该语言的所有字符的字符串(如果可以的话) (不像中文这样的语标语言)。
请注意,在某些环境中测试正则表达式时,需要 |^
和 |$
,而在其他环境中可能会导致问题。
在纯 Python 中,这有效:
import re
text = 'He was a good man, a true humanitarian.'
print(re.sub('(?<=[^\w])man(?=[^\w])', 'gent', text))
text = 'तो एक चांगला माणूस होता माणूसला'
print(re.sub('(?<=[^\w])माणूस(?=[^\w])', 'व्यक्ती', text))
输出:
He was a good gent, a true humanitarian.
तो एक चांगला व्यक्ती होता माणूसला
这样 (?<=[^\w])man(?=[^\w])
可能就是您所需要的。 (我希望这里的马拉地语不是一不小心就粗鲁了 - 我怪 Google 翻译)
你为什么不试试这个 - 把(男人)变成绅士。 然后 运行 另一个代码并将所有 (hugents) 替换为 (human) 一个简单的修复。