python - 从字符串中删除 r n r n

标签 python python-3.x regex string data-extraction

我想从此字符串中删除多余的 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

最佳答案

我建议在这里使用一些 NLP 方法,因为我不明白正则表达式如何告诉 nyears (拼写错误)来自new (正确拼写)。

首先,删除所有独立的 r/n以及那些粘在大写单词和数字上的单词,然后拆分字符串并检查以 n 开头的每个单词。或r使用拼写检查器。第一个n如果 word[1:] 则可以删除是正确的并且 word不是。如果两者都不正确,我认为回退到 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)部分删除 rn如果紧跟大写字母、数字或字符串结尾,则位于单词开头。

然后,for w in s.split():迭代句子中的单词并仅替换以 n 开头的单词或r并且有拼写错误 w[1:] .

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

关于python - 从字符串中删除 r n r n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65850416/

相关文章:

python - 如何合并列表中具有相等值的字典和不相等的连接值并将其他字段保留在字典中?

python - 使用 TENSORFLOW 进行多标签分类---COST 和 Weights 中的 NaN

python - 如何处理 sklearn 随机森林中的类别不平衡。我应该使用样本权重还是类别权重参数

python - 如何删除 Pandas 数据框中带有 NaN 的行?

regex - 带有内联正则表达式的 Scala 匹配语句

python - Django 如何从给定模型实例的自定义字段调用方法?

python-3.x - 在PyCharm中导入opencv python包时出现问题

python - 我在哪里输入我的代码(Pyside2)?

python - 用于将字符串与子字符串匹配的正则表达式

regex - 如何从 R 解析 R 语法?