【问题标题】:Find single letter words with spaces查找带空格的单字母单词
【发布时间】:2015-05-27 02:01:06
【问题描述】:

有一句话:

Ala ma kota i psa.

我们可以看到整个句子在一行,但是如果我们把它放在一个小的div中,它会改变。

在波兰语中,我们有单字母单词,例如“i”(和)或“w”(in、with)等。

这些单词/字母放在行尾时看起来不太好,所以我们将它们放在下一个:

Ala ma kota 
i psa.

代替:

Ala ma kota i
psa.

问题:

我正在尝试查找所有单个字母,以便可以用无间断空格替换结尾空格。这应该够了吧。

【问题讨论】:

  • 你想找到任何一个字母吗?
  • 单个字母,前后有空格,例如spaceLETTER空格
  • 也许替换 any 单个字母后的空格不是您想要的。例如,“Rocky V”中的 v 最好放在 rocky 旁边而不是下一行。也许您可以明确列出您希望最终排在前面的波兰语单字母单词。
  • 这确实是个好主意。常用连词:i、w、o。
  • 请更新您的问题,并使用标点符号(无空格)包含您期望的行为。

标签: ruby regex


【解决方案1】:

从讨论中,听起来行尚未拆分,并且您只想捕获单字母单词“i”、“o”或“w”,并且您希望在单词。让我们也允许分号,只是为了让它更有趣。

你可以这样做:

def no_orphan( str )
    str.gsub( /( [iow][,;]?) /, '\1 ' )
end

irb 中的示例:

irb(main):001:0> def no_orphan( str )
irb(main):002:1>     str.gsub( /( [iow][,;]?) /, '\1 ' )
irb(main):003:1> end
=> nil
irb(main):004:0> no_orphan 'Ala ma kota i psa.'
=> "Ala ma kota i psa."
irb(main):005:0> no_orphan 'Ala ma kota i, psa.'
=> "Ala ma kota i, psa."
irb(main):006:0> no_orphan 'Ala ma kota i; psa.'
=> "Ala ma kota i; psa."
irb(main):007:0> no_orphan 'Test Rocky V with space.'
=> "Test Rocky V with space."
irb(main):008:0> 

【讨论】:

    【解决方案2】:

    您可以使用以下内容匹配末尾的所有单个单词:

    \b[a-zA-Z]$     //or \b\p{L}$
    

    然后你就可以应用你的技巧了..

    DEMO

    编辑:如果您想匹配最后的 spaceLetterSpace,请使用以下内容:

    \s+[a-zA-Z]\b[^a-zA-Z]*
    

    DEMO

    【讨论】:

    • 那些只是 ascii 字母。也许在波兰有更多的可能性。
    • 另外,他想替换 个单个字母之后的普通空格。它还没有结束。
    • 您不会在句末找到它们并带有句号,但它们可能有逗号,例如:i, .忘记补充了。只能是 ascii 字母。
    • 我稍微更新了文本。 rubular.com/r/cfwjuTtRKU 它应该抓住 'i' 字母和周围的空格。
    • 有效。现在不知道哪个更好。你的或迈克尔的。
    【解决方案3】:

    \s(\w[,;]?) *\n 将匹配行尾的单个字母。您可以将其替换为"\n"+group(1)

    【讨论】:

    • 他想替换单个字母后面的空格。
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2014-11-28
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多