我想从字符串中选择所有长词:re.findall("[a-z]{3,}")
然而,由于某种原因我只能使用替代品。因此,我需要用空格替换除了3个或更多字母的单词之外的所有内容。 (例如abc de1 fgh ij
- > abc fgh
)
这样的正则表达式怎么样?
结果应该是所有“[a-z] {3,}”由空格连接。但是,您只能使用替换。
或者在Python中:找到regex
以便
re.sub(regex, " ", text) == " ".join(re.findall("[a-z]{3,}", text))
以下是一些测试用例
import re
solution_regex="..."
for test_str in ["aaa aa aaa aa",
"aaa aa11",
"11aaa11 11aa11",
"aa aa1aa aaaa"
]:
expected_str = " ".join(re.findall("[a-z]{3,}", test_str))
print(test_str, "->", expected_str)
if re.sub(solution_regex, " ", test_str)!=expected_str:
print("ERROR")
->
aaa aa aaa aa -> aaa aaa
aaa aa11 -> aaa
11aaa11 11aa11 -> aaa
aa aa1aa aaaa -> aaaa
请注意,空格与任何其他符号没有区别。
答案 0 :(得分:3)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
// Destination View Controller
let destinationNavigationcontroller: UINavigationController! = segue.destination as! UINavigationController
let destinationViewController: DetailViewController! = destinationNavigationcontroller.topViewController as! DetailViewController
// Selected Row ID
let path = self.tableView.indexPathForSelectedRow! as NSIndexPath
destinationViewController.selectedId = (self.itemList[path.row] as! MyListItem).id
}
}
说明:
\b(?:[a-z,A-Z,_]{1,2}|\w*\d+\w*)\b
表示您要查找的子字符串以\b
开头和结尾border of word
- 非捕获群组(?: )
任何包含至少一位数字且由数字组成的字词,'_'和字母Here你可以看到测试。
答案 1 :(得分:1)
您可以使用正则表达式
(\ S \ B(\ d * [A-Z] \ d *){1,2} \ B)|(\ S \ B \ d + \ b)中
并替换为空字符串,这是一个相同的python代码
import re
regex = r"(\s\b(\d*[a-z]\d*){1,2}\b)|(\s\b\d+\b)"
test_str = "abcd abc ad1r ab a11b a1 11a 1111 1111abcd a1b2c3d"
subst = ""
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0)
if result:
print (result)
这是一个demo
答案 2 :(得分:0)
在Autoit中,这对我有用
#include <Array.au3>
$a = StringRegExp('abc de1 fgh ij 234234324 sdfsdfsdf wfwfwe', '(?i)[a-z]{3,}', 3)
ConsoleWrite(_ArrayToString($a, ' ') & @CRLF)
结果==&gt; abc fgh sdfsdfsdf wfwfwe
答案 3 :(得分:0)
import re
regex = r"(?:^|\s)[^a-z\s]*[a-z]{0,2}[^a-z\s]*(?:\s|$)"
str = "abc de1 fgh ij"
subst = " "
result = re.sub(regex, subst, str)
print (result)
<强>输出:强>
abc fgh
<强>解释强>
(?:^|\s) : non capture group, start of string or space
[^a-z\s]* : 0 or more any character that is not letter or space
[a-z]{0,2} : 0, 1 or 2 letters
[^a-z\s]* : 0 or more any character that is not letter or space
(?:\s|$) : non capture group, space or end of string
答案 4 :(得分:0)
在这里发布其他想法后,我想出了一个答案。我不敢相信我错过了:
([^a-z]+|(?<![a-z])[a-z]{1,2}(?![a-z]))+
https://regex101.com/r/IIxkki/2
匹配非字母或最多两个由非字母限定的字母。