【问题标题】:Regex locate number followed by space followed by character正则表达式定位数字后跟空格后跟字符
【发布时间】:2021-04-08 14:54:22
【问题描述】:

我试图只找到数字后跟空格和后面的字符。

Exemple : text = "3 R"

并希望它是这样的:

Exemple : text = "3. R"

我试过这段代码:

text= re.sub(r'([0-9])(?!.*\d)', r'\1. ', text)

越来越近了,但不知道我应该添加什么。

更新

文字:

Évitez les conversations malsaines en utilisant les 3 R, à savoir 
‘reformuler, recentrer et réorienter’. Créez un cadre confortable en 
reformulant les phrases susceptibles de générer des émotions négatives. Vous 
pouvez également reformuler des reproches tels que : « Cela m’ennuie que tu 
passes autant de temps sur des projets de moindre importance qui ne mènent 
nulle part » en disant plutôt « J’aimerais que tu consacres les efforts que 
tu fournis dans ton travail à davantage de nouveaux projets plutôt qu’à 
quelques projets peu importants... Je suis sûr que tu disposes maintenant de 
suffisamment d’expérience pour gérer des projets inédits et ambitieux. »

我的正则表达式代码:

    text= re.sub(r'\s*(?!\.[’"])([.,?:])(?!(?<=\d.)\d)\s*', r'\1 ', text)
    text= re.sub(r'\s*([-])\s*', r'\1', text)
    text= re.sub(u"\u2013", " ", text)
    text= re.sub(r'(\d)\s+(?=\d)', r'\1', text)
    text= re.sub(r'(\d)\/+(?=\d)', r'\1 ', text)
    text= re.sub(r'([0-9])\b(?!.*\d)',r'\1. ', text)

输出:

Évitez les conversations malsaines en utilisant les 3 R, à savoir 
‘reformuler, recentrer et réorienter’. Créez un cadre confortable en 
reformulant les phrases susceptibles de générer des émotions négatives. Vous 
pouvez également reformuler des 
reproches tels que:  Cela m’ennuie que tu passes autant de temps sur des 
projets de moindre importance qui ne mènent nulle part  en disant plutôt  
J’aimerais que tu consacres les efforts que tu fournis dans ton travail à 
davantage de nouveaux projets plutôt qu’à quelques projets peu importants, Je 
suis sûr que tu disposes maintenant de suffisamment d’expérience pour gérer 
des projets inédits et ambitieux.

我已经尝试了你们建议的代码,但不知道为什么,文本是一个长字符串。

问题可能是由于使用了太多的正则表达式??

我用的是python3.9

sn-p

【问题讨论】:

  • 定义一个输入和你想要的输出,这是不明确的。
  • 使用单词边界,([0-9])\b(?!.*\d)
  • 您可以使用:re.sub(r'(\d)(?= \D)', r'\1.', text)
  • @Adgogo: re.sub(r'(\d)(?= \D)', r'\1.', '3 R')3. R
  • @WiktorStribiżew 我已经添加了我的整个代码

标签: python python-3.x regex


【解决方案1】:

根据您定义的约束(输入/输出)和我们的讨论,您可以使用这个 sn-p:

re.sub(r"(\d+)(?:\s+)(\w)", r"\1. \2", text)

【讨论】:

  • 非常感谢,你能解释一下为什么以前的解决方案不起作用吗,在正则表达式网站中它起作用但不适合我
  • @anubhava 仍然是唯一对我有用的解决方案,我已经在使用正则表达式代码来忽略数字内的空格。
  • @Adgogo:我已经展示了我给出的第一个解决方案是如何工作的。您可以在代码中的任何地方复制/粘贴我的建议并进行测试。事实上,你有更多的sub 电话是在搅浑水
  • @anubhava 你可以签入我已经尝试过你的代码但它对我不起作用的 sn-p,而是它正在处理一个单独的文件 idk 为什么
  • 仅供参考:r"(\d+)(?:\s+)(\w)" = r"(\d+)\s+(\w)"。它也等于re.sub(r"\d+(?=\s+\w)", r"\g&lt;0&gt;. ", text)
【解决方案2】:

这对我有用:

re.sub('(\d)\s([a-zA-Z])', r'\1. \2', text)

它将3 R 替换为3. R。也适用于更大的数字,例如 31789 R 和小写的 3 r

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2016-12-12
    • 2020-09-30
    • 2014-04-29
    • 2020-04-30
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多