正则表达式Notepad++删除除日语字符单词以外的所有内容。

3

我已经搜索了一段时间,但仍然无法弄清楚。

我发现像([一-龯])|([ぁ-んァ-ン])这样的表达式,但不知道如何删除除此之外的所有内容。

我的想法是这样的:

1. おはようございます ohayou gozaimasu - 早上好!
2. こんにちは konnichiwa - 你好/下午好!
3. 久しぶり hisashiburi - 好久不见了。
4. じゃあまた jaa mata - 再见!
5. お元気で o genki de - 注意身体健康。
6. o namae wa nan desu ka - 你叫什么名字? 
7. …desu - 我是......です
8. suki desu - 我喜欢它。
9. 如果你不会挥舞手帕告别(“さようなら” [sayounara]或“farewell”可能更合适),那么“じゃあまた”是一个很好的说“再见”的方式! 还可以使用稍微更礼貌的 “ではまた[dewa mata]”。“じゃあね(再见)”和“じゃあまた明日ね (jaa mata ashita ne – 明天见) ”也是快速友好的离别短语。 如果你在大阪,一定要尝试一些大阪方言“ほなね[hona ne]”!
10. 例子。啊,那是什么。
11. 1402  10点               
12. 1405  11点               
13  1408  12点               
14  1411  1分钟            
15  1414  2分钟           
16. 1450  3小时           
17. 1474  30小时   

变成:

おはようございます
こんにちは
久しぶり
じゃあまた
お元気で
お名前は何ですか
です
好きです
さようなら じゃあまた ではまた じゃあね じゃあまた明日ね 大坂弁 ほなね
ああ、それは、何ですか。
10点
11点
12点
1分钟
2分钟
3小时
30小时

1
10和11等数字看起来不像日语!你们在保留数字方面有什么规定? - Ken Y-N
10是平假名,11-17表示时间,分钟和小时。因此最好将数字保留在日文字母旁边。 - Raxomaru
不,10,11,3,30... 这里是普通数字,不是平假名。 - phuclv
1
我不理解第9行和第10行:为什么要保留空格?如果这是问题中期望输出的一个笔误,那么解决方案就很明显了。 - Wiktor Stribiżew
1
由于您的主要问题是“如何删除所有文本但匹配项”,我决定关闭该问题。日语字符正则表达式可以在此处找到,只需将所有\uXXXX替换为\x{XXXX}以在Notepad++中有效。在前面添加\d*,用一个捕获组包裹,添加|.备选项(因此,它看起来像(\d*(?:[\x{3000}-\x{303F}]|[\x{3040}-\x{309F}]|[\x{30A0}-\x{30FF}]|[\x{FF00}-\x{FFEF}]|[\x{4E00}-\x{9FAF}]|[\x{2605}-\x{2606}]|[\x{2190}-\x{2195}]|\x{203B})+)|.),然后使用上述模式/答案中的替换。最好的问候。 - Wiktor Stribiżew
显示剩余3条评论
2个回答

6
根据 Gurman 和 KenY-N 指出的评论,更新如下:
搜索条件:
[^、-〿぀-ゟ゠-ヿ＀-￯一-龯\r\n]+(?![、-〿぀-ゟ゠-ヿ＀-￯一-龯\d])|[…“”’\"'–]

请将其替换为:

empty

解释:

  1. ^ 表示取反,意味着匹配除了中括号内的字符以外的任何字符
  2. [^、-〿぀-ゟ゠-ヿ＀-￯一-龯\r\n\b] 匹配不需要删除的字符范围,包括平假名、片假名等
  3. \r\n 用于避免替换换行符
  4. + 表示重复匹配该字符类
  5. (?![、-〿぀-ゟ゠-ヿ＀-￯一-龯\d]) 负向先行断言,确保前面的匹配结果后面不跟随日语字符和数字
  6. |[…“”’–] 确保删除这些缺失的标点符号

演示


这将仅删除所有日语字符,无论它们是否与ASCII字符一起出现。 - Tim Biegeleisen
关于我提供的链接,我还没有理解...你能详细说明一下吗? - Mustofa Rizwan
1
@KenY-N 更新了。 - Mustofa Rizwan
1
不是我给你点踩的,但在字符类中的\b表示退格符。\b不是一个“字符”,你不能把它放在字符类中。 - Toto
1
好的,它可以工作了,我给你打分。 - Toto
显示剩余9条评论

2
根据此页面,这将找到每个非日语字符序列:
([^ -ヿ一-龥!-○])+

我跳过了评论中提到的箭头、符号和“奇怪的星号东西”。基本上这将选择任何非日语字符,包括其他语言的文本。请注意,Notepad++似乎不允许\uxxxx格式,因此需要键入字面字符,或者像我一样从charmap中粘贴。

如果我这样做:

\b([^ -ヿ一-龥!-○])+\b

在单词边界之间进行匹配,它也保留了11時和eメール。不过我不确定原因是什么...

这只会删除所有非 ASCII 数字,这不是 OP 想要的。 - Tim Biegeleisen
@TimBiegeleisen 我不太明白你的评论 - 它只是删除ASCII数字; 双宽度数字被保留。 - Ken Y-N
2
OP希望完整保留“10時”。你的回答是否做到了这一点? - Tim Biegeleisen
我现在已经深入调查了,它现在确实可以。 - Ken Y-N
这个不起作用,至少在演示中不行,可能Notepad ++也不行。 - Tim Biegeleisen
@TimBiegeleisen 在Notepad++中可以工作。 - Ken Y-N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接