正则表达式在另一个单词之前添加字符(从选项列表中)

2024-06-06 12:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读this article,这给了我使用群组的想法。 我想在/O、/ORGANIZATION、/PEOPLE或/LOCATION后面的字符前面添加\t

我有以下内容

'The/O\nSkoll/ORGANIZATION\nFoundation/ORGANIZATION\n,/O\nbased/O\nin/O\nSilicon/LOCATION\nValley/LOCATION\na'

想要以下这些

^{pr2}$

我试过了,但没用。我怎么能回忆起regex捕获了哪个组织?在

x = str(t)
x = re.sub('\/(ORGANIZATION|LOCATION|PERSON|O)','\t\1', x)

我的中间解决方案,但最好有一个班轮。在

x = re.sub(r'\/(ORGANIZATION)',r'\t\1', x)
x = re.sub(r'\/(LOCATION)', r'\t\1',x)
x = re.sub(r'\/(PERSON)',r'\t\1', x)
x = re.sub(r'\/(O)',r'\t\1', x)

Tags: therearticlelocationthis字符peopleperson
3条回答
str = 'The/O\nSkoll/ORGANIZATION\nFoun/LOLdation/ORGANIZATION\n,/O\nbased/O\nin/O\nSilicon/LOCATION\nValley/LOCATION\na'
x = re.sub("(/O|/ORGANIZATION|/PEOPLE|/LOCATION)", r"\t\1", str)

但你的组织不需要有两条线。在

您需要一个negative lookahead assertion(语法:(?!...),其中...是断言试图匹配的内容)来区分/O和{}。以下是我的建议:

x = str(t)
x = re.sub(r'\/(ORGANIZATION|LOCATION|PERSON|O(?!R))','\t\\1', x)

注意,lookahead断言以(?开头,因此它不会形成一个编号的组,因此您仍然希望在替换字符串中检索该组。在

还要注意我是如何使第一个字符串成为原始字符串,但没有使第二个字符串成为原始字符串。我假设您想要在替换字符串中使用的是制表符,而不是后跟t的反斜杠,所以我在替换字符串中引用了第二个反斜杠,而不是第一个。如果你需要对这些反斜杠有更多的解释,请告诉我。在

最后,如果您想在替换中保留一个正斜杠,可以像一些人建议的那样,在搜索正则表达式周围加上第二对分组圆括号,但将其添加到替换字符串中可能更简单,因此:

^{pr2}$

我想这就是你要找的。如果您还有任何问题,请告诉我们。在

像这样:

>>> t = 'The/O\nSkoll/ORGANIZATION\nFoundation/ORGANIZATION\n,/O\nbased/O\nin/O\nSilicon/LOCATION\nValley/LOCATION\na'
>>> re.sub(r'(/(?:ORGANIZATION|LOCATION|PERSON|O))',r'\t\1', t)
'The\t/O\nSkoll\t/ORGANIZATION\nFoundation\t/ORGANIZATION\n,\t/O\nbased\t/O\nin\t/O\nSilicon\t/LOCATION\nValley\t/LOCATION\na'

演示:http://regex101.com/r/nB5dN3/1

相关问题 更多 >