从字符串中删除 r n r n
remove r n r n from string
我想从此字符串中删除多余的 r 和 n。我试过正则表达式。不确定正则表达式或其他一些方法在这里是否有用。
这是我尝试使用 import re
的代码
text = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
regex_pattern = re.compile(r'\s[rn]\s')
matches = regex_pattern.findall(text)
for match in matches:
text = text.replace(match," ")
print(text)
当前输出:
r nFamily Medical History new Roger nRobert nDawson n49 nyears old , right shoulder
我们仍然看到很多 r n。还想知道如何从 n49、nyears 中删除 'n' 并从 Dawson 中删除第一个 'n' 而不删除最后一个 'n'
预期输出:
Family Medical History new Roger Robert Dawson 49 years old , right shoulder
尝试这样的事情\b[rn](?=[A-Z0-9 ])
\b
查找任何工作边界(字符串的开头,spaces,换行符)。
[rn]
查找 'r' 或 'n'
(?=[A-Z0-9 ])
查找任何大写字母、space 或数字,但不将它们包含在匹配项中。
检查 https://regex101.com/r/hSmYyi/1 以了解正则表达式和测试。
老派在这儿
>>> text = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
>>> newText = []
>>> for word in text.split(' '):
... if word and not (word == 'n' or word =='r'):
... if not word[0] == 'n':
... newText.append(word)
... else:
... newText.append(word[1:])
...
>>> newText
['Family', 'Medical', 'History', 'ew', 'Roger', 'Robert', 'Dawson', '49', 'years', 'old', ',', 'right', 'shoulder']
>>> ' '.join(newText)
'Family Medical History ew Roger Robert Dawson 49 years old , right shoulder'
>>>
当然你可以随意重构它。
我建议在这里使用一些 NLP 方法,因为我看不出正则表达式如何区分 nyears
(错误拼写)和 new
(正确拼写)。
首先,删除所有独立的 r
/ n
和粘在大写单词和数字上的那些,然后拆分字符串并检查以 n
或 [=13 开头的每个单词=] 与拼写检查器。如果 word[1:]
正确而 word
不正确,则可以删除第一个 n
。如果两者都不正确,我认为回退到 word
.
是安全的
以运行拼写检查为例,可以使用TextBlob
.
这是一个 Python 代码演示:
from textblob import TextBlob
from textblob import Word
import re
s = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
s = re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
result = []
for w in s.split():
if not w.startswith(('n','r')): # The w word does not start with n or r...
result.append(w) # Add it to the result
else:
if Word(w).correct() == w: # If w is a correct word
result.append(w) # Add it to the result
else:
if Word(w[1:]).correct() == w[1:]: # If w[1:] is correct
result.append(w[1:]) # Add w[1:] to the result
else:
result.append(w) # Fallback: add w to the result
print(" ".join(result))
# => Family Medical History new Roger Robert Dawson 49 years old , right shoulder
re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
部分删除单词开头的 r
和 n
如果紧跟大写字母、数字或字符串结尾。
然后,for w in s.split():
遍历句子中的单词,仅替换以 n
或 r
开头且拼写错误为 [=28= 的单词].
免责声明:以TextBlob
为例。您可以自由使用任何其他拼写检查库。 TextBlob spellchecking "is based on Peter Norvig’s “How to Write a Spelling Corrector”1 在模式库中实现。准确率约为 70%"
我想从此字符串中删除多余的 r 和 n。我试过正则表达式。不确定正则表达式或其他一些方法在这里是否有用。
这是我尝试使用 import re
的代码text = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
regex_pattern = re.compile(r'\s[rn]\s')
matches = regex_pattern.findall(text)
for match in matches:
text = text.replace(match," ")
print(text)
当前输出:
r nFamily Medical History new Roger nRobert nDawson n49 nyears old , right shoulder
我们仍然看到很多 r n。还想知道如何从 n49、nyears 中删除 'n' 并从 Dawson 中删除第一个 'n' 而不删除最后一个 'n'
预期输出:
Family Medical History new Roger Robert Dawson 49 years old , right shoulder
尝试这样的事情\b[rn](?=[A-Z0-9 ])
\b
查找任何工作边界(字符串的开头,spaces,换行符)。
[rn]
查找 'r' 或 'n'
(?=[A-Z0-9 ])
查找任何大写字母、space 或数字,但不将它们包含在匹配项中。
检查 https://regex101.com/r/hSmYyi/1 以了解正则表达式和测试。
老派在这儿
>>> text = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
>>> newText = []
>>> for word in text.split(' '):
... if word and not (word == 'n' or word =='r'):
... if not word[0] == 'n':
... newText.append(word)
... else:
... newText.append(word[1:])
...
>>> newText
['Family', 'Medical', 'History', 'ew', 'Roger', 'Robert', 'Dawson', '49', 'years', 'old', ',', 'right', 'shoulder']
>>> ' '.join(newText)
'Family Medical History ew Roger Robert Dawson 49 years old , right shoulder'
>>>
当然你可以随意重构它。
我建议在这里使用一些 NLP 方法,因为我看不出正则表达式如何区分 nyears
(错误拼写)和 new
(正确拼写)。
首先,删除所有独立的 r
/ n
和粘在大写单词和数字上的那些,然后拆分字符串并检查以 n
或 [=13 开头的每个单词=] 与拼写检查器。如果 word[1:]
正确而 word
不正确,则可以删除第一个 n
。如果两者都不正确,我认为回退到 word
.
以运行拼写检查为例,可以使用TextBlob
.
这是一个 Python 代码演示:
from textblob import TextBlob
from textblob import Word
import re
s = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
s = re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
result = []
for w in s.split():
if not w.startswith(('n','r')): # The w word does not start with n or r...
result.append(w) # Add it to the result
else:
if Word(w).correct() == w: # If w is a correct word
result.append(w) # Add it to the result
else:
if Word(w[1:]).correct() == w[1:]: # If w[1:] is correct
result.append(w[1:]) # Add w[1:] to the result
else:
result.append(w) # Fallback: add w to the result
print(" ".join(result))
# => Family Medical History new Roger Robert Dawson 49 years old , right shoulder
re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
部分删除单词开头的 r
和 n
如果紧跟大写字母、数字或字符串结尾。
然后,for w in s.split():
遍历句子中的单词,仅替换以 n
或 r
开头且拼写错误为 [=28= 的单词].
免责声明:以TextBlob
为例。您可以自由使用任何其他拼写检查库。 TextBlob spellchecking "is based on Peter Norvig’s “How to Write a Spelling Corrector”1 在模式库中实现。准确率约为 70%"