从字符串中删除r n

2024-10-03 02:40:42 发布

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

我想从这个字符串中删除额外的r和n。我试过正则表达式。不确定正则表达式或其他方法是否有帮助

这是我正在尝试使用的代码

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、Nyear中删除“n”,并从Dawson中删除第一个“n”,而不删除最后一个“n”

预期产出:

Family Medical History new Roger Robert Dawson 49 years old , right shoulder

Tags: textrightnewhistoryoldregexpatternmedical
3条回答

试试这样的\b[rn](?=[A-Z0-9 ])

\b查找任何工作边界(字符串的开头、空格、换行符)

[rn]查找“r”或“n”

(?=[A-Z0-9 ])查找任何大写字母、空格或数字,但不在匹配中包含它们

签出https://regex101.com/r/hSmYyi/1用于处理正则表达式和测试

我建议在这里使用NLP方法,因为我不知道正则表达式如何区分nyears(错误拼写)和new(正确拼写)

首先,删除所有独立的r/n和那些粘在大写单词和数字上的,然后拆分字符串并用拼写检查器检查以nr开头的每个单词。如果word[1:]正确而word不正确,则可以删除第一个n。如果两者都不正确,我认为回到word是安全的

例如,要运行拼写检查,可以使用^{}

下面是一个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)部分删除单词开头的rn

然后,for w in s.split():迭代句子中的单词,并仅在单词以nr开头且拼写错误为w[1:]时替换该单词

免责声明TextBlob用作示例。您可以自由使用任何其他拼写检查库TextBlob spellchecking基于Peter Norvig在模式库中实现的“如何编写拼写更正器”1。它的准确率约为70%

老派在这里

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

当然,你可以随意重构它

相关问题 更多 >