簡體   English   中英

正則表達式在另一個單詞之前添加字符(來自選擇列表)

[英]Regex adding characters before another word (from a list of choices)

我正在閱讀本文 ,這使我有了使用組的想法。 我想在/ O,/ ORGANIZATION,/ PEOPLE或/ LOCATION之后的字符之前添加\\ t

我有以下

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

並希望以下

The\t/O\nSkoll\t/ORGANIZATION\nFoundation\tORGANIZATION\n

我試過了,但是沒有用。 我如何記起正則表達式捕獲的組織?

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)

像這樣:

>>> 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

由於/O涵蓋了/ORGANIZATION情況,因此無需再次指定。

對於替換字符串,您需要傳遞原始字符串或轉義\\ 因此, 以下兩項都可以工作

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

您將要使用否定的超前斷言 (語法: (?!...) ,其中...是斷言將嘗試匹配的東西),以將/O/ORGANIZATION區分開。 這是我的建議:

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

請注意,前瞻性斷言以(?開頭,因此不會形成帶編號的組,因此您仍然希望在替換字符串中檢索組。

還要注意如何將第一個字符串變成原始字符串,但沒有將第二個字符串變成原始字符串。 我假設您要在替換字符串中使用的是制表符,而不是后跟一個反斜杠,因此我在替換中引用了第二個反斜杠,但不是第一個。 如果您需要有關這些反斜杠的更多說明,請告訴我。

最后,如果要在替換中保留單個正斜杠,可以按照某些人的建議在搜索正則表達式周圍加上第二對分組括號,但是將其添加到替換字符串中可能更簡單,因此:

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

我認為這就是您要尋找的。 如果您還有其他問題,請告訴我們。

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)

在這里,只有兩行〜但就像hjpotter92所說的那樣,您的/ O涵蓋了組織,因此並沒有真正的需要,只是具體而言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM